JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[Effective Java] Item 86. Serializable를 구현한 클래스는 공개 API? #52

Closed taxol1203 closed 3 years ago

taxol1203 commented 3 years ago

455p. 두번째 문단에서

클래스가 Serializable을 구현하면 직렬화된 바이트 스트림 인코딩(직렬화 형태)도 하나의 공개 API 된다.
또한 클래스의 private와 package-private 인스턴스 필드도 API 형태로 공개 된다.

라고 되어있습니다.

직렬화를 하게 되면, 공개 api가 되는 이유가 뭘까요? 직렬화를 하여 클래스가 바이트 스트림이 되면, 그 데이터가 전부 공개되는지 궁금합니다

kjsu0209 commented 3 years ago

클래스를 직렬화하면 public 필드 뿐만 아니라 private도 바이트 스트림 코드가 되어 공개됩니다. 직렬화 데이터의 포맷은 완전히 문서화되어 공개되어 있으므로, 클래스 소스 없이도 직렬화된 스트림 데이터로부터 원하는 내용을 읽을 수도 있어요.

책에서 말하는 API는 외부(클라이언트)에서 접근하여 사용할 수 있는 코드를 말하는 것 같아요. 그래서 내부 내용이 완전히 공개되니 공개 API라고 하는 것 같습니다.

(참고) https://noritersand.github.io/attachments/j-5things.pdf