IT/Programming / / 2023. 4. 25. 15:46

<Effective Java> RULE 75 사용자 지정 직렬화 형식을 사용하면 좋을 지 따져 보라

반응형

 

어떤 직렬화형식이 좋을 지 따지지 않고 기본 직렬화 형식을 그대로 받아들이지 마라.

· 기본 직렬화 형식은 그 객체의 물리적 표현이 논리적 내용과 동일할때만 적절하다.

· 설사 기본 직렬화 형식이 만족 스럽다 하더라도, 불변식이나 보안조건을 만족시키기 위해서는 readObject메서드를 구현해야 마땅한 경우도 많다.

 

객체의 물리적 표현 형태가 논리적으로 내용과 많이 다를 경우 기본 직렬화 형식을 그래도 받아들이면 아래 네 가지 문제가 생기게 된다.

1. 공개 API가 현재 내부 표현 형태에 영원히 종속된다.

2. 너무 많은 공간을 차지하는 문제가 생길 수 있다.

3. 너무 많은 시간을 소비하는 무네가 생길 수 있다.

4. 스택 오버플로 문제가 생길 수 있다.

 

객체의 모든 필드가 transient일때는 defaultWriteObject나 defaultReadObject를 호출하지 않는 것도 기술적으로 가능하긴 하지만 권장하는 사항은 아니다.

 

객체의 논리적상태를 구성하는 값이라는 확신이 들기 전에는 비-transient필드로만들어야 겠다는 결정을 내리지 마라.

 

객체를 직렬화 할 때는 객체의 상태를 전부 읽는 메서드에 적용할 동기화 수단을 반드시 적용해야 한다.

 

어떤 직렬화 형식을 이용하건, 직렬화 가능 클래스를 구현할 때는 직렬 버전UID를 명시적으로 선언해야 한다.

· UID때문에 생길 수 있는 잠재적 호환성 문제가 사라진다.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유