Menu

자바 데이터 타입: 기본형, 참조형, 기본값

자바의 데이터 타입을 쉽게 설명합니다 - 8가지 기본형, 참조형, 기본값, 리터럴과 접미사, 오버플로, 그리고 어떤 숫자 타입을 언제 써야 하는지.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

두 가지 부류: 기본형과 참조형

자바의 모든 값에는 타입이 있고, 그 타입은 두 부류 중 하나에 속합니다. 기본형은 원시 값을 직접 담습니다 - 숫자, 한 글자, 또는 참/거짓입니다. 참조형은 메모리의 다른 곳에 있는 객체를 가리키는 참조(포인터)를 담습니다: String, 배열, 그리고 당신이나 라이브러리가 정의하는 모든 클래스입니다.

이 구분이 중요한 이유는, 기본형은 가볍고 값으로 복사되는 반면, 참조 변수는 공유된 객체를 가리키기 때문입니다. 8가지 기본형부터 시작하세요 - 이들은 다른 모든 것이 그 위에 세워지는 토대입니다.

8가지 기본형

자바에는 정확히 8가지 내장 기본형이 있습니다. 6개는 숫자, 1개는 문자, 1개는 불리언입니다:

처음부터 알아둘 점이 몇 가지 있습니다: 2_000_000의 밑줄은 컴파일러가 무시하는 단순한 시각적 구분자이고, Lf 접미사는 필수이며(자세한 내용은 아래에서), char는 작은따옴표를 쓰지만 String은 큰따옴표를 씁니다.

숫자 타입 고르기

byteshort는 거의 필요하지 않습니다 - 이들은 거대한 배열에서만 메모리를 절약합니다. 실제 선택은 정수의 경우 int/long, 소수의 경우 float/double 사이에서 이루어집니다.

타입크기사용 시점
int32비트정수의 기본값 (~21억까지)
long64비트~20억을 넘는 값: 밀리초 타임스탬프, 파일 크기
double64비트소수의 기본값 - 좋은 정밀도
float32비트메모리가 빠듯하고 정밀도를 희생할 수 있을 때만

함정은 오버플로입니다. int는 범위를 초과하면 조용히 한 바퀴 돌아버립니다 - 오류 없이, 그저 틀린 답만 나옵니다:

maxInt + 1-2147483648로 오버플로되는 이유는 두 피연산자가 모두 int이고 결과도 int로 남기 때문입니다. 한쪽을 먼저 long으로 캐스팅하면 연산이 64비트로 수행됩니다. 값이 커질 수 있을 때 - 특히 1970년 이후의 밀리초 - 는 long을 쓰세요.

리터럴과 그 접미사

그냥 쓴 숫자 리터럴에는 기본 타입이 있고, 이것이 사람들을 곤란하게 만듭니다. 100int이고, 3.14double입니다. long이나 float 리터럴을 쓰려면 접미사를 붙여야 합니다:

8_000_000_000L에서 L을 빼면 코드가 컴파일되지 않습니다. 리터럴이 long 변수에 도달하기도 전에 int 범위를 넘기 때문입니다. 0.5f에서 f를 빼면 자바는 캐스트 없이 doublefloat에 할당할 수 없다고 불평합니다. 접미사는 대소문자를 구분하지 않지만, 대문자 L을 쓰세요 - 소문자 l은 숫자 1과 똑같이 보입니다.

char는 변장한 숫자다

char는 16비트 유니코드 코드 단위를 저장하는데, 이는 곧 작은 부호 없는 정수 역할도 한다는 뜻입니다. 산술 연산을 할 수 있고, 캐스트로 서로 변환할 수 있습니다:

이것은 글자를 이동시킬 때 가끔 유용하지만, 텍스트 처리를 여기에 의존하지는 마세요 - 그것은 String의 역할입니다. char는 작은따옴표('A')를 쓴다는 점에 주의하세요. 큰따옴표("A")는 한 글자짜리 String을 만들며, 이는 완전히 다른 타입입니다.

기본값 (그리고 지역 변수의 함정)

초기화하지 않은 필드와 배열 요소는 합리적인 기본값을 받습니다. 하지만 이는 필드와 배열 칸에만 적용됩니다 - 지역 변수는 기본값을 전혀 받지 않으며, 값을 할당하기 전에 사용하는 것은 런타임의 깜짝 사고가 아니라 컴파일 오류입니다.

만약 대신 main 안에서 int x; System.out.println(x);라고 썼다면, 컴파일러는 "variable x might not have been initialized"라며 이를 거부합니다. 이 엄격함은 장점입니다 - 쓰레기 값을 읽는 것을 막아줍니다. 기억해 둘 기본값: 숫자 타입은 0, booleanfalse, char' ', 그리고 모든 참조형은 null입니다.

다음: Strings

String은 당신이 가장 많이 다루게 될 참조형입니다 - 텍스트, 이어 붙인 값, 사용자 입력. 여기서 다룬 기본형들과는 다르게 동작합니다: 객체이고, 불변(immutable)이며, 문자열 비교에는 그 나름의 함정이 있습니다. 다음 페이지에서 이를 다룹니다.

자주 묻는 질문

자바에는 데이터 타입이 몇 개나 있나요?

자바에는 8가지 기본형이 있습니다: byte, short, int, long, float, double, char, boolean. 그 외의 모든 것 - String, 배열, 그리고 모든 객체 - 은 참조형입니다. 따라서 내장 기본형의 개수는 8개로 고정되어 있지만, 참조형은 당신(과 라이브러리)이 새로운 클래스를 정의하기 때문에 무한합니다.

자바에서 int와 long의 차이는 무엇인가요?

둘 다 정수를 담지만, int는 32비트(범위 약 ±21억)이고 long은 64비트(범위 약 ±920경)입니다. 기본적으로 int를 사용하고, 값이 20억을 넘을 수 있을 때 long으로 전환하세요 - 밀리초 단위 타임스탬프, 파일 크기, 큰 카운터 등입니다. long 리터럴에는 L 접미사가 필요합니다. 예: long big = 10000000000L;.

자바에서 int의 기본값은 무엇인가요?

int 필드의 기본값은 0입니다 - 하지만 기본값이 주어지는 것은 필드와 배열 요소뿐입니다. long0L, double0.0, booleanfalse, char'\u0000', 그리고 모든 참조형은 null이 기본값입니다. 지역 변수에는 기본값이 전혀 주어지지 않습니다 - 사용하기 전에 값을 반드시 할당해야 하며, 그렇지 않으면 코드가 컴파일되지 않습니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기