오늘은 Java에서 Immutable List를 반환하는 두 가지 방법에 대해 알아봤다.
Collections.unmodifiableList
Java 1.2부터 사용 가능.
원본 리스트를 읽기 전용 Wrapper로 감싸는 방식.
장점: 구현이 간단하고, 바로 적용 가능.
단점: 원본 리스트가 변경되면, 반환된 리스트도 영향을 받음.
public List<MenuItem> getItems() {
return Collections.unmodifiableList(items);
}
List.copyOf
Java 10부터 사용 가능.
원본 리스트를 복사하여 완전히 새로운 불변 리스트를 생성.
장점: 원본 리스트와 독립적, 완전한 불변성 보장.
단점: Null 요소가 있으면 NullPointerException
발생.
public List<MenuItem> getItems() {
return List.copyOf(items);
}
unmodifiableList | copyOf | |
---|---|---|
Java 버전 | 1.2 이상 | 10 이상 |
독립성 | 원본과 참조 공유 | 독립적인 리스트 생성 |
Null 허용 여부 | 허용 | 예외 발생 |
List.copyOf
가 더 안전한가?원본 리스트와 독립적이어서, 원본 데이터를 수정하더라도 반환된 리스트는 영향을 받지 않는다.
완전한 불변성을 보장한다. 반환된 리스트는 수정이 불가능하며, 내부적으로 Java의 Immutable Collection으로 처리된다.
Null-safe: Null 값이 포함된 리스트를 방지해, 불변 리스트에서 발생할 수 있는 잠재적인 오류를 줄인다.
코드 명확성: 읽기 전용인지, 완전히 불변한지에 대해 더 분명한 의도를 전달한다.
Java 10 이상: List.copyOf
가 더 안전하고 추천됨.
Java 10 미만: Collections.unmodifiableList
로 대체 가능.
Immutable List를 잘 활용해서 데이터 무결성을 보장해야겠다! 😊