질문 : cond obj = new cond(3) cond 클래스로 새로운 cond 객체를 선언하고 , cond 안에 있는 this.a = a 로 인해 멤버변수 a 는 3 이었지만 ,
main 클래스에서 obj.a = 5 로 정의하였기 때문에 a 의 값이 3에서 5로 재할당되어 계산되는 풀이 과정이 맞는건지?
→ 정답 ! cond obj = new cond(3)
로 인해 cond의 a 는 3이 할당 되었지만 ,
그 다음 줄인 obj.a = 5;
에서 obj
객체의 멤버 변수 a
에 직접적으로 새로운 값인 5
가 재할당
따라서 a = 5 로 계산하는것이 맞음
static
변수의 특징클래스명.변수명
으로 접근 가능→ _inst
변수가 static
으로 선언되었기 때문에 Connection.get()
메소드를 여러 번 호출해도 _inst
변수는 null
로 초기화되지 않고, 이전에 생성된 객체의 주소값을 계속 가지고 있게 됨, 이것이 싱글톤 패턴!
Connection conn1 = Connection.get();
:
_inst
는 null
입니다.if(_inst == null)
조건이 참이므로 _inst = new Connection();
이 실행Connection
객체가 생성되고 _inst
에 할당conn1
변수는 이 새로 생성된 객체를 참조함conn1.count();
:
conn1
이 참조하는 객체의 count
변수 값이 1
로 증가Connection conn2 = Connection.get();
:
_inst
는 null
이 아님 , 이미 첫 번째 호출에서 객체가 생성되었고 , static 변수라서 프로그램 종료까지 변수 값을 저장하고 있기 때문임if(_inst == null)
조건이 거짓이 되므로 새로운 객체를 생성하지 않고, 기존에 생성된 _inst
객체를 반환함conn2
변수는 conn1
과 동일한 객체를 참조하게 되고 ,conn2.count();
:
conn1
과 conn2
는 같은 객체를 가리키므로, 이 객체의 count
변수 값이 2
로 증가