자바에서 데이터가 저장되는 메모리의 위치에 따라 값 타입(원시 타입)과 참조 타입으로 나뉜다. 이 두 타입의 차이점을 이해하는 것은 성능 최적화와 메모리 관리를 위해 매우 중요하다.
new
연산자로 메모리를 할당받아 초기화해야 한다.public class PrimitiveVsReference {
public static void main(String[] args) {
// 값 타입 (Primitive Type)
int a = 5;
int b = a; // b에 a의 값이 복사됨
b = 10;
System.out.println("a: " + a); // a: 5
System.out.println("b: " + b); // b: 10
// 참조 타입 (Reference Type)
Integer x = new Integer(5);
Integer y = x; // y는 x를 참조함
y = 10;
System.out.println("x: " + x); // x: 5
System.out.println("y: " + y); // y: 10
}
}
Boolean의 경우, 원시 타입과 참조 타입 간의 메모리 사용량 차이는 128배가 될 수 있다.
원시 타입은 Null 값을 저장할 수 없지만, 참조 타입은 Null 값을 저장할 수 있다.
아래 이미지는 값 타입과 참조 타입의 평균 실행 시간을 비교한 것이다. 값 타입이 참조 타입보다 더 빠르다는 것을 알 수 있다.
성능과 메모리 효율성을 고려할 때는 원시 타입을 우선적으로 사용하는 것이 좋다. 하지만, Null 값을 다뤄야 하거나 제네릭 타입에서 사용되어야 하는 경우에는 참조 타입을 사용한다.