클라이언트가 개체에 대한 참조를 보유하고 있으므로 클라이언트는 항상 현재 개체와 현재 상태에 액세스합니다. 클래스의 인스턴스는 낡거나 유효하지 않다는 점에서 상태가 아닙니다.
한 곳에서 클래스의 인스턴스를 변경하면 해당 인스턴스를 참조하는 모든 클래스에서 액세스 할 수 있습니다.
이 예제는 클래스 State,B,C
에 모두 A
의 인스턴스가 포함되어 있으므로 메모리에서 동일한 지점 인 aka: reference
을 포함하므로 위에서 만든 점을 보여줍니다. B
클래스가 A
상태를 변경하면 State,B,C
클래스가 참조하는 메모리의 인스턴스가 변경됩니다.
변경된 A
이 이제 A
인 모든 인스턴스가 업데이트됩니다. C
이 변경된 것으로 생각하지 마십시오. 모든 사람들이 업데이트 된 객체를 가리키는 것처럼 생각하면됩니다.
정말 간단한 실제 예입니다. 내 모든 친구에게 내 LinkedIn 프로필을 편집 할 수있는 권한을 부여합니다. 내 LinkedIn 프로필을 'A'로 간주하십시오. 모든 친구들이 내 프로필 (A)을 볼 때 내 제목을 웹 응용 프로그램 개발자로 봅니다. 이제 내 친구 중 한 명이 내 프로필에 액세스하여 호보 (필드)로 내 제목을 변경하면 모든 친구 (A, B, C)가 새 제목을 보게됩니다. 왜 내 다른 친구들 (주, C)은 "웹 응용 프로그램 개발자"를 내 제목 (필드)으로 보지 않습니까? 왜냐하면 내 프로필 (A)의 인스턴스가 하나 있고 프로필에 액세스 할 수있는 사람은 누구나 동일한 프로필을 보거나 업데이트하기 때문입니다.
public class State {
public static void main(String[] args) {
A a = new A();
B b = new B(a);
C c = new C(a);
System.out.println(a.field); //0
System.out.println(b.a.field); //0
System.out.println(c.a.field); //0
b.change();
System.out.println(a.field); //3
System.out.println(b.a.field); //3
System.out.println(c.a.field); //3
}
}
class A{
public Integer field = 0;
}
class B{
public A a;
public B(A a){
this.a = a;
}
public void change(){
this.a.field = 3;
}
}
class C{
public A a;
public C(A a){
this.a = a;
}
}
이전 인스턴스가 새 클래스로 직렬화되고 비 직렬화되면 어떻게됩니까? –