(Effective Java) 필요하다면 방어적 복사본을 만들어라 !!!!!!!!!!!!!!!!중요!!!!!!!!!!!!!!!!!!!!!!


->얼핏보면 변경이 불가능할것처럼 보이지만

Date start = new Date();
Date end = new Date();
Period p = new Period(start, end);
end.setYear(78);

하지만 Date가 변경 가능 클래스라는 점을 이용하면 불변식을 깨뜨릴 수 있다.

따라서 Period객체의 내부를 보호하려면 생성자로 전달되는변경 가능 객체를 반드시 방어적으로 복사




그러나
Period p = new Period(start, end);
p.end().setYear(78); //p의 내부를 변경하게 된다.




-> 길이가 0 아닌 배열은 항상 변경 가능하다는 사실을 기억하자. 그러니 내부 배열을 클라이언트에게 전달할 때는 방어적 복사본을 만들어야 한다.


우리가 배워야 할 진짜 교훈은, 객체의 컴포넌트로는 가능하다면 변경 불가능 객체를 사용해야 한다는 것이다. 그래야 방어적 복사본에 대해서는 신경 쓸 필요가 없다는 것이다.

댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬