본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[java] readResolve, writeReplace 뭐 하는 녀석일까?

by 돼지왕 왕돼지 2016. 11. 3.
반응형

 [java] readResolve, writeReplace 뭐 하는 녀석일까?


example code, Java, objectstreamexception, Private Method, proxy, readresolve, Serializable, Serialization, Singleton, writereplace, writeReplace 뭐 하는 녀석일까?, [java] readResolve, 싱글통


참조 : http://www.javalobby.org/java/forums/t17491.html

singleton 의 경우 serialization 을 하면서 singleton 유지가 안 될 수 있다.
Serialization 은 readResolve() 라는 private method 를 통해서 instantiation 을 진행한다.
이 녀석은 serialization 의 결과로 return 되는 object 를 이야기한다.

public final class MySingleton {

private static final MySingleton INSTANCE = new MySingleton();

private MySingleton() { }


public static MySingleton getInstance() { 

return INSTANCE; 

}


private Object readResolve() throws ObjectStreamException {

// instead of the object we're on, 

// return the class variable INSTANCE

return INSTANCE; 

}

}




참조 : http://minato-kr.tistory.com/266

readResolve 는 writeReplace 와 pair 를 이루는 녀석인데, serializable 하지 않은 객체를 field 로 가진 경우,
그 field serialize 해주기 위해 필요하다.
보통 해당 객체의 serializable 한 핵심정보를 저장하는 serializable 한 class 를 만들어 처리하는 방식으로 한다.
코드를 보는 것이 확실히 쉽게 이해가 되겠다.


// JSONObject 를 serializable 하는 경우...

public class MyObject implements Serializable{

JSONObject mJson;


public MyObject( String jsonStr ){

mJson = new JSONObject( jsonStr );

}


// MyObject 를 Serialize 할 때 불린다.

private Object writeReplace() throws ObjectStreamException{

return new JSONProxy( this );

}


class JSONProxy implements Serializable{

private static final long serialVersionUDI = ... ;


private String mJsonString;


public JSONProxy( MyObject myObj ){

this.mJsonString = mJson.toString();

}


// MyObject 가 Deserialize 할 때 불린다.

private Object readResolve() throws ObjectStreamException{

return new MyObject( jsonString );

}

}

}





반응형

댓글