본문은 Effective Java를 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다.
선결론
- 클래스가 클라이언트로 받거나 반환하는 구성요소가 가변이라면 그 요소는 반드시 방어적으로 복사해야 한다
방어적 복사본 만들기
1. 생성자에서 받은 가변 매개변수 각각을 방어적으로 복사한다
- 매개변수의 유효성을 검사하기 전에 방어적 복사본을 만들고, 이 복사본으로 유효성을 검사하라
- 매개변수가 제3자에 의해 확장될 수 있는 타입이라면 방어적 복사본을 만들 때 clone을 사용하면 안 된다
2. 접근자가 방어적 복사본을 반환하게 한다
- 인스턴스를 복사하는 데는 일반적으로 생성자나 정적 팩터리를 쓰는 게 좋다
3. 외부에서 제공한 객체의 참조를 클래스 내부에 보관해야 할 때면 해당 객체가 변경될 수 있는지 고려한다
- 변경이 가능하다면 변경이 이루어진 후에 클래스가 문제없이 동작할지 확인하라
- 확신할 수 없다면 복사본을 만들어 내부에 저장한다
'책 > Effective Java' 카테고리의 다른 글
[이펙티브 자바] 아이템 53: 가변인수는 신중히 사용하라 (0) | 2022.06.23 |
---|---|
[이펙티브 자바] 아이템 51: 메서드 시그니처를 신중히 설계하라 (0) | 2022.06.22 |
[이펙티브 자바] 아이템 48: 스트림 병렬화는 주의해서 적용하라 (0) | 2022.06.17 |
[이펙티브 자바] 아이템 46: 스트림에서는 부작용 없는 함수를 사용하라 (0) | 2022.06.15 |
[이펙티브 자바] 아이템 43: 람다보다는 메서드 참조를 사용하라 (0) | 2022.06.10 |