반응형
어떤 직렬화형식이 좋을 지 따지지 않고 기본 직렬화 형식을 그대로 받아들이지 마라.
· 기본 직렬화 형식은 그 객체의 물리적 표현이 논리적 내용과 동일할때만 적절하다.
· 설사 기본 직렬화 형식이 만족 스럽다 하더라도, 불변식이나 보안조건을 만족시키기 위해서는 readObject메서드를 구현해야 마땅한 경우도 많다.
객체의 물리적 표현 형태가 논리적으로 내용과 많이 다를 경우 기본 직렬화 형식을 그래도 받아들이면 아래 네 가지 문제가 생기게 된다.
1. 공개 API가 현재 내부 표현 형태에 영원히 종속된다.
2. 너무 많은 공간을 차지하는 문제가 생길 수 있다.
3. 너무 많은 시간을 소비하는 무네가 생길 수 있다.
4. 스택 오버플로 문제가 생길 수 있다.
객체의 모든 필드가 transient일때는 defaultWriteObject나 defaultReadObject를 호출하지 않는 것도 기술적으로 가능하긴 하지만 권장하는 사항은 아니다.
객체의 논리적상태를 구성하는 값이라는 확신이 들기 전에는 비-transient필드로만들어야 겠다는 결정을 내리지 마라.
객체를 직렬화 할 때는 객체의 상태를 전부 읽는 메서드에 적용할 동기화 수단을 반드시 적용해야 한다.
어떤 직렬화 형식을 이용하건, 직렬화 가능 클래스를 구현할 때는 직렬 버전UID를 명시적으로 선언해야 한다.
· UID때문에 생길 수 있는 잠재적 호환성 문제가 사라진다.
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 73 스레드 그룹은 피하라 (0) | 2023.04.25 |
---|---|
<Effective Java> RULE 74 Serializable 인터페이스를 구현할 때는 신중하라 (0) | 2023.04.25 |
<Effective Java> RULE 76 readObject메서드는 방어적으로 구현하라 (0) | 2023.04.25 |
<Effective Java> RULE 77 개체 통제가 필요하다면 readResolve 대신 enum자료형을 이용하라. (0) | 2023.04.25 |
<Effective Java> RULE 78 직렬화된 객체 대신 직렬화 프록시를 고려해 보라 (1) | 2023.04.25 |