readObject 메서드가 실질적으로는 public 생성자나 마찬가지다. 생성자를 구현할 떄와 같은 점에 주의해야 한다는 것이다. 생성자와 마찬가지로 인자의 유혀성을 검사해야 하고 필요하다면 인자를 방어적으로 복사해야 한다. 

 

 즉, readObject는 바이트 스트림을인자로 받는 생성자다. 문제는 인공적으로 만들어진 바이트 스트림을 readObject에 인자로 넘길 때 생긴다. 클래스 불변식을 위반하는 객체를 만들어 낼 수 있게 되는 것이다. 


요약

readObject 메서드를 구현할 때는 public 생성자를 구현할 때와 같은 마음가짐을 가지라는 것이다. 어떤 바이트 스트림이 주어지더라도 유효한 객체가 생성될 수 있도록 해야 한다. 바이트 스트림이 실제로 직렬화된 객체일 것이라 가정하지 마라.


+ Recent posts