🟰 2021년 3회차 기출 1번과 동일
class Connection { // class Connecton 정의
Ⓐ private static Connection _inst = null;
Ⓑ private int count = 0;
❷ static public Connection get() {
❸ if(_inst == null) {
❹ _inst = new Connection();
❺ return _inst;
}
❾ return _inst;
}
❼ public void count() { count++; };
⓯ public int getCount() { return count; }
}
public class SingleTon {
public static void main(String[] args) {
❶ Connection conn1 = Connection.get();
❻ conn1.count();
❽ Connection conn2 = Connection.get();
❿ conn2.count();
⓫ Connection conn3 = Connection.get();
⓬ conn3.count();
⓭ conn1.count();
⓮⓰ System.out.print(conn1.getCount());
}
}
🖍 4
Ⓐprivate static Connection _inst = null;
: Connection 클래스의 객체 변수_inst_
를 선언하고null
로 초기화.
✶ 객체 생성 예약어인new
가 생력되었으므로 생성이 아닌 선언만 함. 객체 변수를 선언만 하게 되면 heap이 아닌 stack 영역에 내용 없이 저장되어 사용이 불가능.
✶ 객체 변수를 생성한다는 것은Connection _inst = new Connection();
과 같이 객체 생성 예약어인new
를 통해 heap 영역에 공간을 확보하여 Connection 클래스의 내용을 저장한 후 그 주소를 객체 변수에 저장하는 것.
Ⓑ
❶Connection conn1 = Connection.get();
에 의해 Connection 클래스의 객체 변수conn1
을 선언하고get()
메소드를 호출한 결과를 저장.
⁃ Ⓐ에서와 같이 객체 변수를 선언만 하였으므로 객체 변수conn1
은 stack에 생성됨.
✶ Connection 클래스의get()
메소드는public static
으로 선언되었고, Connection 객체를 만들지 않고도 호출할 수 있는 정적 메소드.
❷ Connetction의 형을 반환하는 get()메소드의 시작점.
❸_inst
가null
이면 ❹,❺번을 수행하고, 아니면 ❾번으로 이동._inst
가null
이므로 ❹번으로 이동.
❹ Connetction 클래스의 내용을 heap 영역에 저장하고 그 주소를_inst
에 저장함.
⁃ Ⓐ에서 객체 변수_inst
는 이미 선언되었으므로,Connection _inst = new Connection();
와 같이 작성하지 않고 앞쪽의 클래스명을 생략하여_inst = new Connection();
와 같이 작성함. 생성 예약어인new
를 통해 heap 영역에 공간을 확보하고 Connection 클래스의 내용을 저장한 후 그 주소를 객체 변수_inst
에 저장함. ∴ 객체 변수_inst
는 Connetcion() 클래스의 내용이 저장된 heap 영역을 가리키게 됨.
❺_inst
에 저장된 값을 메소드를 호출했던 ❶으로 이동. ❺에서 돌려받은_inst
의 값을conn1
에 저장.
⁃_inst
에는 Connection() 클래스의 내용이 저장된 heap의 영역의 주소가 저장되어 있으며,conn1
에도 동일한 주소가 저정되므로,_inst
와conn1
은 같은 heap의 영역의 주소를 가리키게 됨.
❻conn1
의count()
메소드를 호출. (conn1
은 Connection() 클래스의 객체 변수이므로 Connection() 클래스의count()
메소드를 호출한다는 의미.)
❼ 반환값이 없는count()
메소드의 시작점. count 값에 1를 더한 후count()
메소드를 호출했던 ❻으로 돌아가 다음 문장인 ❽번을 수행. ∴ count = 1
【❽ Connection 클래스의 객체 변수conn2
을 선언하고get()
메소드를 호출한 결과를 저장.
❷번으로가get()
실행._inst
의 값이null
이 아니므로 ❾으로 이동.
❾_inst
의 저장된 값을 메소드를 호출했던 ❽으로 반환. ❾에서 돌려받은_inst
의 값을conn2
에 저장.
❿conn2
의count()
메소드를 호출. ❼번으로 가 count 값에 1를 더한 후count()
메소드를 호출했던 ❿번으로 돌아가 다음 문장 실행.】 ∴ count = 2
⓫~⓬번은 【 ... 】 반복. ∴ count = 3
⓭conn1
의count()
메소드를 호출. ❻번 문장과 동일하게 실행됨. ∴ count = 4
⓮conn1
의getCount()
메소드 호출하고 돌려받은 값을 출력.
⓯ 정수를 반환하는getCount()
메소드의 시작점. count의 값 4을 메소드로 호출했던 ⓰번으로 반환.
✶ 객체 변수_inst
,conn1
,conn2
,conn3
은 모두 같은 heap 영역의 주소를 가리키고 있으므로 해당 heap의 영역에 저장된 내용을 공유하게 됨.
⓰ ⓯번에서 돌려 받은 값 4를 출력.
참고,
기출 문제 : https://newbt.kr/시험/정보처리기사%2520실기
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023.