JAVA/자바 기초

[JAVA]변수(2)-기본형(primitive type)의 세부적인 내용

다당근 2021. 10. 10. 16:19

 

기본형
primitive type

논리형 - boolean

  • 기본값 false
  • boolean형 변수는 대답(yes/no), 스위치(on/off) 등의 논리구현에 주로 사용

논리형에는 boolean 한가지 밖에 없다. true 와 false 중 하나를 저장할 수 있으며 기본값은 false 이다.

1bit 만으로도 충분하지만 자바에서는 데이터를 다루는 최소 단위가 byte이기 때문에 boolean의 크기는 1byte 이다. 

 

문자형 - char

  • char타입의 변수는 단 하나의 문자만을 저장할 수 있다.
  • '문자'가 저장되는 것 같지만 사실은 문자가 아닌 문자의 유니코드(정수)가 저장된다.
  • 문자를 저장하기 위한 변수를 선언할 때 사용된다.
  • 기본값은 '\u0000' 이다.
char ch = 'A' // 문자 'A'를 char타입의 변수 ch 에 저장.
char ch = 65 // 이처럼 유니코드를 직접 저장할 수도 있다.

문자 'A'의 유니코드는 65이므로 변수 ch에는 65가 저장된다.

char타입의 크기는 2byte 이므로 16자리의 2진수로 표현할 수 있는 정수의 개수인 65536개(=2¹⁶) 의 코드를 사용할 수 있다.

💥여기서 유니코드란?

유니코드는 숫자와 글자가 1:1로 매핑된 형태의 코드이다. 각각의 글자마다 정해진 숫자가 있다는 뜻이다. 컴퓨터는 숫자밖에 모르기 때문에 문자가 유니코드에 따라 숫자로 변환되어 저장된다. ex) A는 65, B는 66, s는 115.. 

사람들이 입력한 문자를 컴퓨터가 알아볼 수 있도록 바이너리 신호로 바꿔주는 것을 인코딩이라고 하며 그 반대로 코드를 사람들이 볼 수 있도록 문자로 변환하는 것을 디코딩이라고 한다.

 

정수형 - byte, short, int, long

  • 정수형에는 모두 4개의 자료형이 있으며 각 자료형이 저장할 수 있는 값의 범위는 서로 다르다.
  • byte(1byte) < short(2byte) < int(4byte) < long(8byte)
  • byte, short, int 의 기본형은 0이다.
  • long 의 기본형은 0L 이다.

 

정수형의 선택 기준

변수에 저장하려는 정수값의 범위에 따라 4개의 정수형 중에서 하나를 선택하면 되겠지만, byte 나 short보다 int 를 사용하는 것이 좋다. byte와 short이 int 보다 크기가 작아서 메모리를 조금 더 절약할 수는 있지만, 저장할 수 있는 값의 범위가 작은 편이라서 연산 시에 범위를 넘어 잘못된 결과를 얻기가 쉽다.

그리고 JVM의 피연산자 스택이 피연산자를 4byte단위로 저장하기 때문에 크기가 4byte보다 작은 자료형(byte, short) 의 값을 계산할 때는 4byte로 변환하여 연산이 수행된다. 그래서 오히려 int를 사용하는 것이 더 효율적이다.

 

결론은 정수형 변수를 선언할 때는 int를, int의 범위를 넘는 수를 다뤄야 할 때는 long을 사용하자.

그리고 byte나 short는 성능보다 저장공간을 절약하는 것이 더 중요할 때 사용하자.

 

정수형의 오버플로우

해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우(overflow)라고 한다. 오버플로우가 발생하지 않도록 충분한 크기의 타입을 선택해서 사용해야한다.

 

실수형 - float, double

  • 실수형은 소수점수도 표현해야 하므로 얼마나 큰 값을 표현할 수 있는가 뿐만 아니라 얼마나 0에 가깝게 표현할 수 있는가도 중요하다.
  • 실수형 값을 저장할 때 float 타입이 아닌 double 타입의 변수를 사용하는 경우는 대부분 저장하려는 값의 범위 때문이 아니라 보다 높은 정밀도가 필요해서이다.
  • float의 기본형은 0.0f 이다.
  • double의 기본형은 0.0d 또는 0.0 이다.

float타입은 정밀도가 7자리 인데, 즉 '7자리의 10진수를 오차없이 저장할 수 있다' 는 뜻이다.

double타입은 10진수로 15자리의 정밀도를 가진다.

 


정확한 기본형 데이터타입의 저장 가능 범위는 다음과 같다.

종류 데이터형 표현 범위 크기
bit byte
논리형 boolean true 또는 false 8 1
문자형 char '\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터) 16 2
정수형 byte -128 ~ 127 8 1
short -32768 ~ 32767 16 2
int -2147483648 ~ 2147483647 32 4
long -9223372036854775808 ~ 9223372036854775807 64 8
실수형 float 1.4E-45 ~ 3.4028235E38 32 4
double 4.9E-324 ~ 1.7976931348623157E308 64 8

참고

자바의 정석-남궁성