[Java] 변수의 자료형

김용준·2022년 8월 23일
0

Java Basic

목록 보기
5/22

변수의 자료형(Data Type)

변수의 자료형은 앞서 언급했던 변수의 '타입'이다. 변수에 저장할 수 있는 데이터의 종류는 변수의 자료형에 따라 결정된다. 자료형은 크게 기본형과 참조형으로 나눌 수 있고, 기본형은 8가지로 구분된다. 그 외 나머지는 모두 참조형 변수이다.

기본형 (Primitive Type)

기본형 변수는 논리형, 문자형, 정수형, 실수형으로 나뉘며 총 8종류가 있다.

TypeKeywordSizeRange
논리형boolean1 bytetrue, false
문자형char2 byte (유니코드)0 ~ 65,535
정수형byte1 byte-128 ~ 127
정수형short2 byte-32,768 ~ 32,767
정수형int (기본)4 byte-2,147,483,648 ~ 2,147,483,647
정수형long8 byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형float4 byte3.4 X 10−38 ~ 3.4 X 1038 의 근사값
실수형double (기본)8 byte1.7 X 10−308 ~ 1.7 X 10308 의 근사값
  • 기본형 변수는 실제 '값'을 저장한다.

  • boolean은 True, False 두 가지 값을 가지기 때문에 1bit만 있어도 되지만 일반적으로 메모리의 최소 단위는 1byte이기 때문에 1byte의 크기를 가진다.

  • char는 자바에서 2byte 문자체계인 유니코드를 사용하기 때문에 2byte 크기를 가진다.

정수형 범위

우선 정수형의 범위부터 알아보자. 1bit에는 0과1 2개의 수를 저장할 수 있다. 2bit에는 00,01,10,11 4개의 수를 저장할 수 있다. 즉 bit수를 n이라고 할 때 n bit에는 2n2^n개의 수를 저장할 수 있다. 또한 음수를 표현하기 위해 가장 앞의 1bit를 부호비트로 사용한다. 표현할 수 있는 수의 범위를 정리하면 다음과 같다.

  • 부호없는 정수 : 00 ~ 2n12^n-1
  • 부호있는 정수 : 2n1-2^{n-1} ~ 2n112^{n-1}-1

실수형 범위

실수형의 변수는 부호, 지수, 가수 세 부분으로 나누어 저장한다. float형은 4byte로 부호(1bit)+지수(8bit)+가수(23bit)로 이루어져 있다.
예를 들어, float형은 3.4E38로 표현하는데 E38은 103810^{38}이란 의미이다. 이때 3.4가 가수이고 38이 지수이다.

또한, 실수형 float의 정밀도는 7자리이다. 즉, 오차없이 표현할 수 있는 자릿수가 7자리라는 의미이다. 그러면 왜 7자리인가?
float형의 가수 23bit는 정규화를 통해 실제로 24bit까지 저장할 수 있다. 따라서 107<224<10810^7 < 2^24 < 10^8 이므로 float형으로 오차없이 표현할 수 있는 자릿수는 7자리가 된다. 그러므로 가수의 자릿수가 많을수록 표현하고자 하는 수의 정확도가 높다고 볼 수 있다.

정리하면 실수형은 가수와 지수를 나누어 표현하기 때문에 정수형보다 넓은 범위의 수를 표현할 수 있지만, 1.41045-1.4*10^{-45} ~ 1.410451.4*10^{-45} 와 같은 오차범위가 발생한다. 원래 저장하려는 값과 컴퓨터에 실제로 저장되는 값에 차이가 있다는 의미이다. 실수형으로 표현할 수 있는 범위는 다음과 같다.

  • float : 1.410451.4*10^{-45} ~ 3.410383.4*10^{38}, (1.41045-1.4*10^{-45} ~ 3.41038-3.4*10^{38})
  • double : 4.9103244.9*10^{-324} ~ 1.8103081.8*10^{308}, (4.910324-4.9*10^{-324} ~ 1.810308-1.8*10^{308})

오버플로우 (Overflow)

변수에 저장된 값이 자료형의 범위를 초과할 때 '오버플로우'가 발생했다고 한다. 반대로 자료형의 범위보다 더 작은 값을 저장할 때 '언더플로우'가 발생했다고 한다.

예를 들어, 4bit 타입의 2진수 '1111'에 1을 더한다고 생각하자. 결과는 '10000'이 나와야 하지만 4bit로는 4자리만 저장할 수 있기 때문에 '0000'으로 표현된다. 즉, 5자리의 2진수 '10000'중에서 하위 4bit만 저장하게 되는 것이다.

위에서 든 예시는 부호없는 정수였으나 부호있는 정수는 최대값과 최소값이 다르기 때문에 오버플로우가 발생하는 시점이 다르다. 마찬가지로 다른 자료형도 최대값과 최소값이 다르기 때문에 오버플로우 발생시점이 모두 다르다.

참조형 (Reference Type)

참조형 변수는 데이터가 저장되어 있는 '주소'를 값으로 저장한다. 메모리의 최소 단위는 일반적으로 1byte이고, 메모리에는 1byte단위로 일련번호가 있는데 이 번호를 '메모리 주소'라고 한다.

Data가 저장되어 있는 메모리상의 주소가 있고, 그 '주소값'을 변수x가 저장하고 있다.

profile
차선이 모여 최선이 된다.

0개의 댓글