Post

데이터 타입

데이터 타입(자료형)

프로그래밍을 할 때 쓰이는 숫자, 문자열 등의 자료 형태로 사용하는 그 모든 것을 뜻한다

Java의 데이터 타입은 크게 기본 자료형(Primitive type)과 참조 자료형(Reference type)으로 나뉜다.

type

  • 기본 타입은 정수, 실수, 문자, 논리 리터럴을 저장하는 타입을 말한다.
  • 참조 타입은 객체의 주소를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다.

Primitive type (기본 타입)

  • 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 계산을 위한 실제 값을 저장한다.
  • 자바에서 기본 자료형은 반드시 사용하기 전에 선언되어야 한다.
  • 비객체 타입이므로 null 값을 가질 수 없다. 만약 Primitive type에 Null을 넣고 싶다면 Wrapper Class를 활용한다.
  • 실제 값을 저장하는 공간으로 스택(Stack) 영역에 저장된다.
분류타입기본값값의 범위값의 크기
정수형byte0-128 ~ 1271byte
 short0-32,768 ~ 32,7672byte
 int0-2,147.. ~ 2.147..4byte
 long0L- 9,223.. ~ 9.223..8byte
실수형float0.0f(3.4 X 10-38) ~ (3.4 X 10.38)4byte
 double0.0(1.7 X 10-308) ~ (1.7 X 10308)8byte
문자형char‘\u0000’‘\u0000’(0) ~ ‘\uffff’(65535)2byte
논리형booleanfalsetrue, false1byte
  • 1 byte는 8 bit이다. 1 bit는 2진수 (0,1) 한 자리를 뜻 한다.
  • 정수형 프리미티브 타입 중 byte 자료형의 메모리 크기는 1 byte 즉 8 bit이다. 8 bit로 표현이 가능한 값의 개수는 2의 8제곱(=256)인데 값의 범위는 왜 -128 ~ 127 일까?

signed 타입

  • 컴퓨터에서는 음수를 표현하기 위해 MSB (Most Significant Bit) 를 사용한다.
  • MSB란 최상위 비트 (가장 왼쪽에 위치한 비트)를 뜻한다.

    | | x | | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | | | – | – | – | – | – | – | – | – |

  • x로 표시한 가장 왼쪽에 나타낸 비트를 MSB라고 하고 부호 비트라고도 한다.
  • 이 값이 1이면 음수, 0이면 양수로 판단한다.

실수형

실수형의 경우 값의 크기가 4byte, 8byte인데 정수형과 비교했을 때 값의 표현 범위가 훨씬 넓다. 그 이유는 값을 저장하는 방법이 다르기 때문이다.

  • float과 double은 모두 IEEE 754 표준 (부동 소수점 연산에 대한 표준)을 따른다.
  • 실수형의 경우 부호(s), 지수(e), 가수(m) 로 구성되며, 부동 소수점 방식을 사용하며 다음과 같이 표현할 수 있다.
    • s * m * 2^( e - N + 1)
    • float : 부호(1비트) + 지수(8비트) + 가수(23비트) = 32비트
    • double : 부호(1비트) + 지수(11비트) + 가수(52비트) = 64비트
  • 이 때 float과 double은 IEEE 754 부동 소수점 방식을 사용해서 정확한 실수를 저장하지 않고 최대한 완벽에 가깝기를 바라는 근사치 값을 저장하기 때문에 그 값의 정확성을 보장할 수 없다.
  • 그래서 정확한 계산이 요구될 때는 jaba.math.BigDecimal 클래스를 사용한다.

Reference type (참조 타입)

  • 클래스 타입(class type) , 인터페이스 타입(interface type) , 배열 타입(array type) , 열거 타입(enum type) 이 있다.
  • Reference type은 JAVA에서 최상인 java.lang.Object클래스를 상속하는 모든 클래스들을 뜻한다.
  • new 키워드를 이용하여 객체를 생성하여 데이터가 생성된 주소를 참조하는 타입이다.
  • 빈 객체를 의미하는 Null이 존재한다.
  • 참조 타입의 데이터의 크기가 가변적, 동적이기 때문에 동적으로 관리되는 Heap 영역에 저장된다.
  • 힙(Heap) 영역에 생성된 인스턴스는 메소드나 각종 인터페이스에서 접근하기 위해 JVM의 Stack 영역에 존재하는 Frame에 일종의 포인터인 참조값을 가지고 있어 이를 통해 인스턴스를 다룬다.
This post is licensed under CC BY 4.0 by the author.