Java List.copyOf() 문법 return 값에 add, clear 불가능

List.copyOf(list); 형태로 쓰는 이 문법 Java 10부터 쓸 수 있고, 원본 리스트를 복사해서 ‘수정할 수 없는 새 리스트‘를 만든다

단, 얕은 복사임 -> 4. [주의] 얕은 복사 확인할 것.

 

언제, 어떻게 써야하는지

  1. 수정할 수 없음: 반환된 리스트에 add, remove, set을 호출하면 UnsupportedOperationException이 나온다.
  2. 원본가 분리됨: 복사한 뒤에 원본 workouts에 요소를 추가해도 복사본은 바뀌지 않는다.
  3. null을 허용하지 않음: 리스트 안에 null이 하나라도 있으면 NullPointException이 반환된다.
  4. [주의] 얕은 복사: 리스트라는 껍데기만 새로 만들고, 그 안에 든 개별 객체는 원본과 똑같은 객체를 가리킨다.

 

Class가 내부에서 관리하는 멤버 리스트가 있을 때, 리스트 원본을 그냥 돌려주면, 받은 쪽에서 add나 clear를 통해 내부 데이터를 변형/망가뜨릴 수 있음. 그래서 List.copyOf()를 쓰면 읽기만 가능한 복사본을 넘기게 되므로, 내부 상태를 지킬 수 있게 된다.

public List<Member> getMembers() { return member; } // 하는 순간 인생 망할 수도 있음

public List<Member> getMembers() { return List.copyOf(member); } // 로 전달하면 add, clear 사용불가능

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다