19 Aug 2023 EffectiveJava
이번 장 전반에서 이야기 했듯, Serializable을 구현하기로 결정한 순간 언어의 정상 메커니즘인 생성자 이외의 방법으로 인스턴스를 생성할 수 있게 된다.
이는 버그와 보안 문제가 일어날 가능성이 커진다는 뜻이다. 하지만 이 위험을 직렬화 프록시 패턴(serialization proxy pattern)을 이용하면 크게 줄 일 수 있다.
직렬화 프록시...
19 Aug 2023 EffectiveJava
인스턴스 수를 통제하는 경우 대표적인 예시로 싱글톤 패턴을 들 수 있다.
public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis()...
19 Aug 2023 EffectiveJava
Item50에서는 불변인 날짜 범위 클래스를 만드는데 가변인 Date 필드를 이용했다.
방어적 복사를 사용하는 불변 클래스
public final class Period implements Serializable { private static final long serialVersionUID <span...
17 Aug 2023 EffectiveJava
개발 일정에 쫓기는 상황에서는 API 설계에 노력을 집중하고 종종 다음 릴리스에서 제대로 다시 구현하고, 이번 릴리스에서는 그냥 동작만 하도록 만드는 경우가 있다.
직렬화 형태
먼저 고민해보고 괜찮다고 판단될 때만 기본 직렬화 형태를 사용하라. 기본 직렬화 영태는 유연성, 성능, 정확성 측면에서 신중히 고민한 후 합당할...
14 Aug 2023 EffectiveJava
어떤 클래스의 인스턴스를 직렬화할 수 있게 하려면 클래스 선언에 implements Serializable만 덧붙이면 된다.
직렬화를 지원하기란 짧게 보면 손쉬워 보이지만, 길게보면 아주 값비싼 일이다.
Serializable
Serializable을 구현하면 릴리스한 뒤에는 수정하기 어렵다.
Serializable을 구현하면 직렬화된 바이트 스트림 인코딩도 하나의 공개 API가 된다. 그래서 이 클래스가...