Java의 데이터 타입(기본형, 참조형)
값의 종류에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것을 데이터 타입이라고 한다. 데이터 타입은 크게 기본형(Primitive Data Types)과 참조형(Reference Data Types)으로 나뉜다. 기본형에는 8가지 자료형이 있고 참조형은 기본형을 제외한 나머지 자료형이라고 할 수 있다. 기본형은 8가지 타입의 실제 값을 갖지만 참조형은 어떤 값이 저장돼 있는 메모리상의 주소를 저장한다.
기본형에는 다음과 같이 8가지의 자료형들이 있다.
구분 | 기본값 | 값의 범위 | 데이터 크기 | |
---|---|---|---|---|
byte | 정수형 | 0 | -128 ~ 127 | 1byte |
short | 정수형 | 0 | -32768 ~ 32767 | 2byte |
int | 정수형 | 0 | -2147483648 ~ 2147483647 | 4byte |
long | 정수형 | 0L | -9223372036854775808 ~ | |
9223372036854775807 | 8byte | |||
char | 정수형* / | |||
문자형 | '\u0000' | '\u0000' ~ '\uffff' | ||
⇒ 0 ~ 65535 | 2byte | |||
float | 부동소수점형 | 0.0f | ±1.4×10⁻⁴⁵ ~ 3.4×10³⁸의 근사값 | |
(오차없이 7자리) | 4byte | |||
double | 부동소수점형 | 0.0d | ±4.9×10⁻³²⁴ ~ ±1.7×10³⁰⁸의 근사값 | |
(오차없이 15자리) | 8byte | |||
boolean | 논리형 | false | true, false | 1byte* |
※ char는 보통 문자형으로 나뉘지만 The Java® Language Specification에서는 정수형으로 분류되고 있다.
※ boolean의 데이터 크기는 정확히 알 수 없다:
boolean은 1bit의 정보를 나타내지만 실제 데이터 크기는 정확하게 알 수 없다. JVM에 boolean 타입이 정의되어 있긴 하지만 값을 연산하기 위한 명령이 따로 없고 int나 byte 타입처럼 처리된다. 그래서 일반적으로 boolean 타입을 대부분의 컴퓨터에서 가장 작은 주소 단위로 쓰이는 1byte로 표현한다.
리터럴은 크게 5가지로 나눌 수 있다.
종류 | 리터럴 | 접미사 |
---|---|---|
논리형 | false, true | 없음 |
정수형 | 0, 123, 0b0101, 077, 0xFF, 100L 등… | l(L) |
실수형 | 3.14, 3.0e8, 1.4f 등… | f(F), d(D) |
문자형 | ‘A’, ‘1’, ‘\n’ 등… | 없음 |
문자열 | “ABC”, “123”. “A”, “true” 등… | 없음 |
정수형과 실수형에는 여러 타입이 존재하므로 리터럴에 접미사를 붙여 타입을 구분한다.
int bin = 0b10; // 2
int oct = 010; // 8
int hex = 0x10; // 16
long big = 100_000_000_000L; // 100000000000
참조형은 기본형처럼 값 자체를 저장하는 것이 아니라 값의 위치를 저장하고 그 주소를 참조하여 값을 찾는다. 참조형 변수 간의 연산은 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형이다.