방어적 복사를 "복사하면 끝"으로 외워 왔는지, 아니면 얕은 복사의 한계·불변 타입과의 관계·성능 비용까지 같이 풀 수 있는지를 가른다.
방어적 복사는 생성자 인자나 getter 반환값으로 가변 객체(Date·List·Map·내부 컬렉션 등)를 그대로 노출하지 않고 복사본을 만들어 참조 공유를 끊는 기법이다. 컬렉션은 복사와 함께 Collections.unmodifiableList나 List.copyOf 같은 변경 불가 뷰를 제공해 외부 수정을 막을 수 있다. 다만 얕은 복사만으로는 내부 원소가 가변일 때 같은 문제가 다시 생긴다 — 원소까지 불변이거나 deep copy를 한 경우에만 "진짜 캡슐화"가 된다. 가능하면 처음부터 불변 타입(Instant, String, Record)으로 모델링해 방어적 복사가 필요 없는 구조를 만드는 게 더 깔끔하다.
도메인 객체의 내부 필드가 외부에서 바뀌어 사고가 났던 경험이 있다면 방어적 복사로 끊었던 사례로 풀어낼 수 있다
`unmodifiableList`로 충분하다고 생각했다가 원소 수정으로 다시 사고가 난 경험이 있다면 얕은 복사의 한계 이야기로 이어갈 수 있다
DTO·도메인 객체를 Record·불변 컬렉션 기반으로 옮기며 방어적 복사 자체가 필요 없어진 경험이 있다면 "애초에 불변 모델링" 관점으로 일반화할 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.