-
item 88 readObject 메서드는 방어적으로 작성하라책/이펙티브 자바 2022. 4. 28. 15:30
ITEM 88 readObject 메서드는 방어적으로 작성하라
객체를 역직렬화할 때는 클라이언트가 소유해서는 안 되는 객체 참조를 갖는 필드를 모두 반드시 방어적으로 복사해야 한다
readObject 메서드를 작성할 때는 언제나 public 생성자를 작성하는 자세로 임하자
readObject는 어떤 바이트 스트림이 넘어오더라도 유효한 인스턴스를 만들어내야 한다
바이트 스트림이 진짜 직렬화된 인스턴스라고 가정해서는 안 된다
여기서는 기본 직렬화 형태를 사용한 클래스를 예로 들었지만 커스텀 직렬화를 사용하더라도 모든 문제가 그대로 발생할 수 있다
안전한 readObject 메서드를 작성하는 지침
- private이어야 하는 객체 참조 필드는 각 필드가 가리키는 객체를 방어적으로 복사하라
- 불변 클래스 내의 가변 요소
- 모든 불변식을 검사해 어긋나는게 발견되면 InvalidObjectException을 던진다
- 방어적 복사 다음에는 반드시 불변식 검사가 뒤따라야 한다
- 역직렬화 후 객체 그래프 전체의 유효성을 검사해야 한다면 ObjectInputValidation 인터페이스를 사용하라
- 직접적이든 간접적이든 재정의할 수 있는 메서드는 호출하지말자
'책 > 이펙티브 자바' 카테고리의 다른 글
item 90 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라 (0) 2022.04.28 item 89 인스턴스 수를 통제해야 한다면 readResolve 보다는 열거 타입을 사용하라 (0) 2022.04.28 item 87 커스텀 직렬화 형태를 고려해보라 (0) 2022.04.28 item 86 Serializable을 구현할지는 신중히 결정하라 (0) 2022.04.26 item 85 자바 직렬화의 대안을 찾으라 (0) 2022.04.26 - private이어야 하는 객체 참조 필드는 각 필드가 가리키는 객체를 방어적으로 복사하라