[Java] 변수 선언과 기본 자료형

Geehyun(장지현)·2024년 1월 22일
1

Java

목록 보기
3/12
post-thumbnail

변수 선언

//선언만
자료형 변수명;

//선언과 동시에 할당
자료형 변수명 =;

Java에서의 변수선언도 JS와 유사하게 선언하지만, 차이점은 예약어가 Java에서 정해놓은 자료형으로 입력해서 사용한다는 점에서 차이가 있습니다.

💡 변수 선언 후 할당을 안하면?
변수 선언 시 선언과 동시에 값을 할당할 수도 있지만, 선언만 해놓고 값 할당은 나중에 할 수도 있습니다. 이럴 경우 값이 할당되기 전까지 해당 변수의 값은 null 상태입니다.
이러한 null의 경우 어떠한 연산을 해도 null이 나오기 때문에 논리적 오류에 주의해야합니다.
할당안하고 사용하기
위 이미지 처럼 변수 선언 후 할당을 안한채 사용하려하면 에러가 표시됩니다.

변수 네이밍 규칙

필수사항
1. 식별자는 첫 시작은 글자, 달러기호(),밑줄기호()로시작해야함(숫자로시작할수없음)2.식별자에는글자,숫자,달러기호(), 밑줄기호(_)로 시작해야 함 (숫자로 시작할 수 없음) 2. 식별자에는 글자, 숫자, 달러기호(), 밀줄기호(_)만 사용할 수 있음
3. Java 자체에서 이미 사용중인 키워드는 사용 불가
4. 띄어쓰기불가

권고사항
1. 한글 사용을 지양합니다. 되도록 영어로 작성하도록 합니다.
2. 카멜(camel) 케이스 사용 권장

변수의 생존기간(life cycle)

변수의 생존기간이란, 변수가 만들어진 후 사라지기까지의 기간을 의미합니다.
사용자가 변수를 선언해서 사용 후 JVM에서 일정 기준 이후 메모리에서 삭제 처리 합니다.

이 기준을 변수의 생존기간이라 합니다. 이러한 기간은 아래의 문제 때문에 생기게 되었습니다.
1. 보안이슈 - 외부에서 해당 변수 접근 문제
2. 메모리 충돌 방지

{
	int a = 2; //변수 a 생성시점
    {
    	int b = 3; //변수 b 생성시점
        System.out.println(b);
    } //변수 b 사라지는 시점
    System.out.println(a);
} //변수 a 사라지는 시점

변수의 생존기간은 해당 변수가 만들어진 {} 안에서만 존재한다.
변수의 생존기간

💡 변수의 생존기간
변수의 생존기간은의 기준은 변수의 할당시점이 아니라 변수의 선언시점 부터 시작한다는 점을 주의하자!

자료형

자료형의 경우 기본 자료형참조 자료형 두 가지로 구분이 됩니다.
기본 자료형의 경우 스택 영역에 저장이 되며, 참조 자료형은 힙(주소는 스택) 영역에 저장 됩니다.

기본자료형의 경우 변수명을 소문자로 시작, 참조자료형의 경우 변수명을 대문자로 시작하는 방식이 권고됩니다. (필수X)

💡 자바의 메모리 구조
자바의 메모리는 크게 3가지로 나눠집니다.(사실 4개지만....여튼 3개로 주로 구분)

  • class, static, final, 메서드 영역
  • stack 영역
  • heap 영역

기본 자료형

Primitive Type으로 실제 값으로 받은 데이터 자체를 저장하는 자료형입니다.

해당 데이터는 스택 영역에 저장됩니다.

자료형키워드자료의 크기값의 범위
부울대수boolean1bytetrue, false
정수byte1byte(-2^7) ~ (2^7)-1
short2byte(-2^15) ~ (2^15)-1
int4byte(-2^31) ~ (2^31)-1
long8byte(-2^63) ~ (2^63)-1
실수float4byte±(1.40 x (10^-45) ~ 3.40 x (10^38))
double8byte±(4.94 x (10^-324) ~ 1.79 x (10^308))
문자(정수)char2byte유니코드 문자(0 ~ (2^16)-1)

💡 값의 범위가 어떤 의미인지 확인하기
byte 자료형을 예시로 보면 -128 ~ 127까지를 표현할 수 있는 자료형이다. 그런데 이런 자료형에 해당 값을 초과하는 숫자를 넣게 되면 어떻게 될까?

byte test = (byte) 566;
byte test1 = (byte) 128;
System.out.println(test); //54 출력됨
System.out.println(test1); //-128이 출력됨

위 예시 처럼 넣은 값과 영 다른 엉뚱한 값이 나오는 것 처럼 보인다. 하지만 사실상 -128 ~ 127까지의 값 범위에서 127을 초과하면 다시 가장 낮은 값으로 돌아와서 -128이 표시되는 방식 입니다.
byte 예시

부울대수

  • boolean

참(true), 거짓(false) 값만 저장하는 자료형 입니다.
이 자료형의 경우 1bit를 사용하지만 Java의 자료처리 최소 단위가 1byte이기 때문에 1byte가 할당 됩니다.

정수

  • byte
  • short
  • int
  • long

💡 자바에서의 정수값 표현

  • 10진수 : 숫자
  • 2진수 : 0b + 숫자
  • 8진수 : 0 + 숫자
  • 16진수 : 0x + 숫자

실수

  • float
  • double

문자

  • char

💡 문자 저장/출력 방식

  • 문자의 저장 방식
    : 문자 값 또는 정수가 입력되었을 경우 문자로 입력된 경우 최종적으로 유니코드 표에 따른 정수값으로 메모리에 저장됩니다.
    \u로 시작하는 유니코드 정수 자체로 저장할 수도 있습니다.
  • 문자의 출력 방식
    : 메모리에 할당되어있는 정수값을 유니코드 표에 따른 문자로 출력합니다.

기본 자료형 간 타입 변환

Java에서 기본 자료형의 경우 =을 기준으로 선언한 자료 타입과 갑의 자료 타입을 맞춰서 입력해줘야합니다. 기본적으로 입력된 값이 해당 자료형 내에 포함될 경우 자동 형변환으로 자동으로 맞춰지지만, 입력된 값이 해당 자료형의 크기보다 클 경우 수동으로 형변환을 해줘야합니다.

boolean을 제외한 기본 자료형 7개는 자료형 끼리 서로 변환할 수 있습니다.

💡 자료의 크기 순서
boolean < byte < short < char < int < long < float < double
여기서 자료형의 크기는 자료형의 바이트 순이 아니라 저장하는 값의 범위 기준입니다.

이러한 자료형 변환을 Type Casting 이라고 하며 2가지 방법으로 할 수 있습니다.

- 캐스팅 방법 1 : (자료형) 표기

//사용법
자료형 변수명 = (자료형);

//사용예시
byte test;
test = (byte)560;

- 캐스팅 방법 2 : 실수리터럴 단위문자 표기

//사용법
long 변수명 =L;
float 변수명 =F;

//사용예시
long test;
test = 16L;

실수의 경우 해당 단위문자를 이용할 수 있는데, L = long / F = float 으로 값 뒤에 표기합니다.
사실 L, F는 l, f로도 쓸수 있지만 되도록 대문자 L, F로 쓰는걸 권장합니다.

💡 명시적 형변환
Java의 경우 자동 형변환이 이뤄지기는 하지만, 코드를 짤 때 가능한 명시적으로 형변환하는 방식으로 작성하는 것을 권장합니다.

기본 자료형 간의 연산

자료형 간의 연산을 할 경우 CPU에서 연산 최소 단위가 int이므로 int보다 작은 단위의 자료형 끼리의 연산에서도 결과는 int형으로 나오게 됩니다.
또한, 다른 자료형 끼리의 연산의 경우 더 큰 자료형으로 자동형변환하여 연산된다는 점도 참고해야합니다.

기본 자료형의 초기값

기본 자료형, 참조 자료형 모두 선언 후 할당을 안 한 상태에서 출력하려하면 스택 메모리에 할당된 값이 없기 때문에 오류가 발생합니다.
따라서 각 자료형에 맞는 초기값을 설정해줘야할 경우 아래 초기값으로 설정합니다.

  • boolean : false
  • 정수형 : 0
  • 실수형 : 0.0

참고

Do it! 진짜 개발자가 되는 Java 프로그램 입분서 자바 완전 정복 - 김동형
위 책을 공부하며 작성하고 있습니다!

profile
개발자를 꿈꾸는 병아리 (블로그 이전 준비중 입니다.)

0개의 댓글