프로그래밍/JAVA

필드 선언 시 기본 데이터 타입,불변객체 / 참조 타입 차이점

hwangsehee 2025. 1. 24. 00:22
public class Person{

	private String name;
	private int age;
    	private List<String> histories= new ArrayList<>();
    
   	 //getter, setter
}

 

person이라는 객체를 정의 할 때 

String , int 형은 필드 선언 시 초기화 없이 선언 할 수 있지만 

List는 new 키워드를 사용해서 초기화를 해줘야 한다. 

 

이유가 뭘까?

📌 기본 데이터 타입(primitive type) , 불변 객체 (immutable object)는 필드 선언 시 초기화 없이 선언 가능 

참조타입(reference type)은 객체를 생성해서 할당해야 하기 때문에 new 키워드를 사용하여 초기화 

 

 

기본 데이터 타입과 불변 객체는 값을 직접 할당하기 때문에 객체 생성 없이 선언만으로 사용가능. 

(int는 0 ,String 은 null) 

 

참조 타입 (List , Map, Set 등 ) 

객체를 참조하는 변수이므로 null로 초기화 된다. 

이 변수를 사용하려면 실제 객체를 생성하여 할당하여야한다. 

배열처럼 고정된 크기가 아니라, 동적으로 크기를 확장,축소할 수 있는 객체이다. 

그래서 객체를 생성하고 메모리 상에서 실제로 데이터를 담을 수 있어야 한다. 

이때문에 new 키워드를 사용하여 객체를 생성해야 한다. 

 

👨🏿‍💻 null 초기화하면 안되는 이유 

리스트를 null로 초기화하면 리스트를 사용하기전에 반드시 null 체크를 해야 한다. 

이를 방지하기 위해 빈 리스트로 초기화한다. 

> 데이터가 없을 때도 안전하게 접근 가능