오타는 봐주길.. 굽신굽신.
public class Singleton
{
private final static Singleton self = Singleton();
public static Singleton access()
{
return self;
}
private Singleton()
{
}
public double getPer( int score )
{
return (double)score / avg;
}
}
public class Student implements Serializable
{
private Singleton manager = Singleton.access();
private int socre;
public double getPer()
{
return manager.getPer( score );
}
}
이런 거에서... Student를 Serialization 했다가 deserialization하면 문제가
생긴다는거... Serialization 했다가 deserialization 한 Student의 manager랑
이후에 새로 만든 Student의 manager랑 서로 다른 object야.
public class Singleton
{
private final static Singleton self = Singleton();
public static Singleton access()
{
return self;
}
private Singleton()
{
}
public double getPer( int score )
{
return (double)score / avg;
}
}
public class Student implements Serializable
{
private Singleton manager = Singleton.access();
private int socre;
public double getPer()
{
return manager.getPer( score );
}
}
이런 거에서... Student를 Serialization 했다가 deserialization하면 문제가
생긴다는거... Serialization 했다가 deserialization 한 Student의 manager랑
이후에 새로 만든 Student의 manager랑 서로 다른 object야.
별다른 문제는 없을거 같은데 저 avg는 어디서 오는거?
아... Singleton class 안에 있는 변수... private int avg... 저거 문제가.
avg 값이 변하면, Serialization 했던 객체가 호출하는 manager랑 새로 만든 Student 객체가 호출하는 manager랑 avg 값이 달라져.
Sigleton안에 어떤 설정이나 값을 유지시켜야할 변수들이 존재한다면 그것들을 하나의 Bean이나 DTO로 정리해서 외부로 빼면서 Serialization을 해주면서 다시 복구 할때 그녀석을 기반으로 Class의 변수나 값들을 init해주는 부분을 싱글턴 선언부분에 추가해주면 될듯. 뭔가 값을 유지하는게 Singleton내부에 존재하는걸로 보이는데 그것에 대한 문제로 보임.
보통 Singleton만들면서 어떤 값이나 설정을 참조할경우 외부에 어떤 값으로 저장하고 init이란 메소드로 초기생성할때 같이 초기화해주는 방법을 많이써