[java] readResolve, writeReplace 뭐 하는 녀석일까? |
참조 : 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 );
}
}
}
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Java] Unbounded Wildcards (0) | 2016.11.23 |
---|---|
[android] Localize 에 대한 이야기. (0) | 2016.11.10 |
[Java] writeObject 와 readObject 는 무엇인가? (0) | 2016.10.25 |
[Java] Generic explicit type parameter 이야기 (0) | 2016.10.18 |
WeakHashMap 에 대해 제대로 이해하자. (0) | 2016.10.13 |
댓글