2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

[item 19] readResolve나 writeReplace 메서드를 protected로 선언해야하는 이유 #67

Closed ssstopeun closed 1 year ago

ssstopeun commented 1 year ago

p.127에서 마지막으로, Serializable을 구현한 상속용 클래스가 readResolve나 writeReplace 메서드를 갖는 다면 이 메서드들은 private이 아닌 protected로 선언해야한다. 부분에서 이 메서드들이 왜 protected로 선언되야 하나요? 이 메서드들이 상속이 허용되어야 하는 이유가 궁금합니다.

gmelon commented 1 year ago

Serializable을 구현한 직렬화/역직렬화가 가능한 클래스들은 readResolvewriteReplace 메서드를 사용해 직/역직렬화를 수행하게 됩니다. 이때, 이를 상속받는 클래스 역시 직/역직렬화가 되어야 하므로 readResolvewriteReplace 메서드가 필요하게 되는데(필드가 추가됨에 따라 재정의해서 사용하게 될 것으로 보입니다), 만약 이를 private로 선언했을 경우 하위 클래스에서 해당 메서드들이 무시되어 제대로 직/역직렬화가 이뤄지지 않는 문제가 발생하게 됩니다.

이러한 문제 때문에 protected로 선언해야 한다고 한 것 같습니다.