본문 바로가기
[Effective Java] 인스턴스 제어에는 readResolve 메소드보다 enum 타입을 사용하자. [Effective Java] 인스턴스 제어에는 readResolve 메소드보다 enum 타입을 사용하자. - readResolve 메소드는 readObject 메소드에서 생성한 인스턴스를 다른 인스턴스로 바꾸어준다. 만일 역직렬화되는 객체의 클래스에서 readResolve 메소드를 올바르게 정의하면 그 객체가 역직렬화된 후 그 결과로 새롭게 생성된 객체에 대해 이 메소드가 자동 호출되며, 이 메소드에서 반환하는 객체 참조가 역직렬화로 새롭게 생성된 객체 대신 반환된다. - 싱글톤의 경우 다음과 같은 방법으로 싱글톤을 유지할 수 있다. private Object readResolve(){// Deserialization 으로 생성된 새로운 녀석은 GC 된다.return INSTANCE;} - readRe.. 2017. 3. 27.
[Effective Java] 방어 가능한 readObject 메소드를 작성하자 [Effective Java] 방어 가능한 readObject 메소드를 작성하자 - Serializable 하게 만들고 싶은 class 의 물리적 표현과 논리적 표현이 같다고 해도, 무조건 implements Serializable 을 붙이는 것이 능사가 아니다. readObject 는 바이트 스트림 인자 하나만 받는 생성자라고 볼 수 있는데 누군가가 고의적으로 이상한 바이트 스트림을 제공할 경우 문제가 될 수 있다. 따라서 readObject 메소드를 만들고, defaultReadObject() 를 수행 후, 역직렬화되는 객체의 유효성을 검사해야 한다. 만일 유효성 검사에 실패하면, readObject 메소드에서 InvalidObjectException 예외를 발생시켜야 한다. - 위의 방법으로 유효성.. 2017. 3. 24.
[Effective Java] 독자적인 직렬화 형태의 사용을 고려하자 [Effective Java] 독자적인 직렬화 형태의 사용을 고려하자 - 클래스를 설계할 때 클래스가 Serializable 을 구현하면서 기본 직렬화 형태를 사용한다면, 나중에 함부로 버릴 수 없고, 그 직렬화 형태를 계속 유지해야 할 가능성이 높다. - 적합 여부를 우선적으로 고려해보고 기본 직렬화 형태를 수용하자. 기본 직렬화 형태는 유연성, 성능, 정확성의 관점에서 타당하다는 결정이 섰을 때 사용해야 한다. 일반적으로 말하면, 우리가 독자적인 직렬화 형태를 설계한다고 할 때 하게될 인코딩과 대부분 같은 경우에만 기본 직렬화 형태를 사용해야 한다. - 이상적인 객체 직렬화 형태는 그 객체가 표현하는 논리적 데이터만 포함한 것이다. - 기본 직렬화 형태는 객체의 물리적 표현이 논리적인 내용과 동일할 .. 2017. 3. 23.
[Java] writeObject 와 readObject 는 무엇인가? [Java] writeObject 와 readObject 는 무엇인가? 참조 : http://www.javablogging.com/what-are-writeobject-and-readobject-customizing-the-serialization-process/ - serialize 하고 싶은 객체에 Serializable interface 만 implements 해주면 serialize 가 가능하다. -ObjectOutputStream 을 이용하여 stream 형태로 만들어 file 에 쓰거나 전송할 수 있다. - transient 나 static 으로 마크되지 않은 필드들은 모두 serialized 된다. - 기본적인 serialization 에 추가적으로 어떤 조치를 취하고 싶다면 아래와 같이 w.. 2016. 10. 25.
[Java] Serializable & Externalizable 자바, Serializable & Externalizable Serializable 은 implement 를 해주면 자동으로 object 안에 있는 모든 변수들이 serializable 하게 된다. 물론 primitive type 에 대해서이다. Serializable 을 구현한 클래스에서 다른 object 를 담고 있다면 해당 object 도 serializable 해야 정상적으로 serializable 하게 된다. 만약 변수 중에 serializable 하게 만들고 싶지 않은 것들이 있다면 transient 이라는 키워드를 앞에 붙여주어야 한다. Externalizable 인터페이스는 Serializable 인터페이스의 자식 클래스이다.Serializable 은 object 의 모든 변수들을 자동으로.. 2013. 9. 9.
반응형