도당탕탕
Item86 : SERIALIZABLE을 구현할때는 주의해서 하라. 본문
이유
Serializable을 구현시 다음과 같은 비용이 발생
- 클래스 구현을 바꾸기 어려움
- 구현을 변경하면 byte-stream encoding이 변경되고 클라이언트 코드가 영향을 받는다.
- 버그와 보안적 결함을 가질 가능성 증가
- 명시적으로 생성자를 호출하지 않기 때문에, 초기화과정을 잊거나 공격자 코드가 호출되도록 둘 수 있음.
- 테스트 비용증가
- 버전들 사이에 serialize, deserialize 과정의 호환성이 테스트 되어야 한다.
추가적으로 주의할것
- 상속할 수 있으면서 Serializable을 구현하는 클래스를 정의할 때는 더 주의하기
- 클라이언트 코드에서
finalize
를 정의하여 finalizer attack을 수행할 수 있다.
- 클라이언트 코드에서
- Inner class들은 Serializable을 구현하면 안 됨
- 필드들이 어떻게 클래스 정의에 대응하는지가 정의되지 않음
'JAVA' 카테고리의 다른 글
Item88 : 방어적으로 READOBJECT 함수를 사용하라. (0) | 2023.02.09 |
---|---|
Item87 : 커스텀 직렬화 형태를 고려해보라 (0) | 2023.02.09 |
Item85 : 자바 직렬화의 대안을 찾으라 (0) | 2023.02.08 |
Item84 : Thread Scheduler에 의존하지마라 (0) | 2023.02.07 |
Item83 : 지연 초기화는 신중히 사용하라 (0) | 2023.02.07 |
Comments