You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
도입
class Xxx implements Serializable
? ❌직렬화(serialization)란?
역직렬화(deserialization)란?
Serializable
구현의 문제점릴리스한 뒤에는 수정하기 어려움
Serializable
인터페이스를 구현하면 직렬화된 바이트 스트림 직렬화 형태도 하나의 공개 API 가 됨private
와package-private
필드마저 공개 API 가 되어, 캡슐화에 위배되는 셈ObjectOutputStream.putFields
와ObjectOutputStream.readFields
로 기존 직렬화 형태를 유지하면서 내부 표현을 바꿀 수는 있음그럼에도 불구하고, 직렬화 가능 클래스를 만들고 싶다면~?
만약 직렬화 형태를 제임스 고슬링 옹이 설계한다면~?
InvalidClassException
예외가 발생할 수 있음버그와 보안 구멍이 생길 위험 ⬆️
readObject
는 방어적으로 작성하라해당 클래스의 신버전을 릴리스할 때 테스트할 것이 늘어남
Serializable
구현의 이득과 비용Serializable
구현BigInteger
,Instant
Serializable
구현을 하면 안되는 것들상속용으로 설계된 클래스
Throwable
,Component
Throwable
: 서버가 RMI 를 통해 클라이언트로 예외를 보내기 위해 구현Component
: GUI 를 전송하고 저장하고 복원하기 위해 구현대부분의 인터페이스
Serializable
인터페이스를 구현한 녀석들을 활용하는 대상에게 큰 부담을 줌내부 클래스(inner class)
Serializable
을 구현해도 됨클래스 필드가 직렬화와 확장이 모두 가능할 시 주의사항
finalize
메서드를 재정의하지 못하게 해야 함final
로 선언readObjectNoData
메서드를 추가해야 함readObjectNoData
메서드는 자바 4부터 추가, 직렬화 가능 클래스에 직렬화 가능 상위 클래스를 추가하는 드문 경우를 위한 메서드Serializable
인터페이스를 구현하지 않기로 할 때 주의사항회고
implement Serializable
코드를 추가했었는데, 가볍게 여길 사항이 아니었다.References
Beta Was this translation helpful? Give feedback.
All reactions