readObject 메서드가 실질적으로는 public 생성자나 마찬가지다. 생성자를 구현할 떄와 같은 점에 주의해야 한다는 것이다. 생성자와 마찬가지로 인자의 유혀성을 검사해야 하고 필요하다면 인자를 방어적으로 복사해야 한다.
즉, readObject는 바이트 스트림을인자로 받는 생성자다. 문제는 인공적으로 만들어진 바이트 스트림을 readObject에 인자로 넘길 때 생긴다. 클래스 불변식을 위반하는 객체를 만들어 낼 수 있게 되는 것이다.
요약
readObject 메서드를 구현할 때는 public 생성자를 구현할 때와 같은 마음가짐을 가지라는 것이다. 어떤 바이트 스트림이 주어지더라도 유효한 객체가 생성될 수 있도록 해야 한다. 바이트 스트림이 실제로 직렬화된 객체일 것이라 가정하지 마라.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[직렬화]규칙78. 직렬화된 객체 대신 직렬화 프락시를 고려해 보라 (0) | 2017.05.10 |
---|---|
[직렬화]규칙77. 개체 통제가 필요하다면 readResolve 대신 enum 자료형을 이용하라 (0) | 2017.05.10 |
[직렬화]규칙75. 사용자 지정 직렬화 형식을 사용하면 좋을지 따져 보라 (0) | 2017.05.09 |
[직렬화]규칙74. Serializable 인터페이스를 구현할 때는 신중하라 (0) | 2017.05.09 |
[병행성]규칙73. 스레드 그룹은 피하라 (0) | 2017.05.08 |