자바의 데이터 타입은 크게 두 가지로 나뉩니다.
기본형(Primitive Type)
참조형(Reference Type)
기본형 타입은 자바에서 가장 단순한 데이터 저장 단위입니다. 메모리에 값 자체를 저장합니다.
분류 |
타입 |
크기 (비트) |
기본값 |
설명 |
---|---|---|---|---|
정수형 |
byte |
8 |
0 |
-128 ~ 127 범위 |
short |
16 |
0 |
-32,768 ~ 32,767 |
|
int |
32 |
0 |
일반적인 정수 사용 시 |
|
long |
64 |
0L |
큰 범위의 정수 |
|
실수형 |
float |
32 |
0.0f |
소수점 사용, 단정도 |
double |
64 |
0.0 |
기본 실수형, 배정도 |
|
문자형 |
char |
16 |
‘\u0000’ |
유니코드 문자 한 개 |
논리형 |
boolean |
1 (JVM 구현에 따라 다름) |
false |
참/거짓 |
int age = 25;
double height = 172.5;
char grade = 'A';
boolean isAdult = true;
참조형은 **객체의 주소(참조값)**를 저장하며, 객체의 실제 데이터는 힙 메모리에 저장됩니다.
String
배열 (int[], String[] 등)
사용자 정의 클래스 (Student, Car 등)
Interface, Enum, List, Map, Set 등 컬렉션
String name = "홍길동";
int[] scores = {90, 85, 100};
Student student = new Student();
참조형은 모두 null로 초기화될 수 있습니다.
구분 |
기본형 |
참조형 |
---|---|---|
저장 내용 |
실제 값 |
객체 주소 (참조값) |
메모리 위치 |
스택 |
스택에 주소, 힙에 실제 객체 |
초기값 |
숫자: 0, 불린: false 등 |
null |
동등 비교 |
값 자체 비교 (==) |
주소 비교 (==), 값 비교는 .equals() |
작은 타입 → 큰 타입은 자동으로 변환됩니다.
int num = 10;
double d = num; // int → double 자동 변환
큰 타입 → 작은 타입은 명시적으로 변환해야 하며, 데이터 손실 가능성이 있습니다.
double pi = 3.14;
int n = (int) pi; // 결과: 3
타입을 생략하고 컴파일러에게 추론하도록 하는 문법입니다. 지역 변수에만 사용 가능합니다.
var name = "홍길동"; // 컴파일 시 String으로 추론
var score = 95; // int로 추론
하지만 타입 명시가 없으므로 가독성이 떨어질 수 있어, 명확한 경우에만 사용하는 것이 좋습니다.
기본형은 객체가 아니기 때문에, 객체처럼 사용하기 위해 자바는 각 기본형에 대응되는 Wrapper 클래스를 제공합니다.
기본형 |
Wrapper 클래스 |
---|---|
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
Wrapper 클래스는 null 저장이 가능하며, 컬렉션과 함께 자주 사용됩니다.
자바는 정적 타입 언어로서, 타입 선언이 필수이다.
기본형은 값을 직접 저장하고, 참조형은 객체의 주소를 저장한다.
기본형은 성능이 좋고, 참조형은 유연한 데이터 구조를 다룰 수 있다.
Wrapper 클래스와 형 변환은 다양한 상황에서 필수적인 개념이다.