정처기 실기 : 2024년 1회차 기출, 1️⃣

m_ngyeong·2024년 7월 17일
0
post-thumbnail

정보처리기사 실기


📝 2024년 1회차 기출, 1️⃣

1. Java Lang. - Singleton Patten

🟰 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()메소드의 시작점.
_instnull이면 ❹,❺번을 수행하고, 아니면 ❾번으로 이동. _instnull이므로 ❹번으로 이동.
❹ 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에도 동일한 주소가 저정되므로, _instconn1은 같은 heap의 영역의 주소를 가리키게 됨.
conn1count() 메소드를 호출. (conn1은 Connection() 클래스의 객체 변수이므로 Connection() 클래스의 count() 메소드를 호출한다는 의미.)
반환값이 없는 count() 메소드의 시작점. count 값에 1를 더한 후 count() 메소드를 호출했던 ❻으로 돌아가 다음 문장인 ❽번을 수행. ∴ count = 1
【❽ Connection 클래스의 객체 변수 conn2을 선언하고 get() 메소드를 호출한 결과를 저장.
❷번으로가 get() 실행. _inst의 값이 null이 아니므로 ❾으로 이동.
_inst의 저장된 값을 메소드를 호출했던 ❽으로 반환. ❾에서 돌려받은 _inst의 값을 conn2에 저장.
conn2count() 메소드를 호출. ❼번으로 가 count 값에 1를 더한 후 count() 메소드를 호출했던 ❿번으로 돌아가 다음 문장 실행.】 ∴ count = 2
⓫~⓬번은 【 ... 】 반복. ∴ count = 3
conn1count() 메소드를 호출. ❻번 문장과 동일하게 실행됨. ∴ count = 4

conn1getCount() 메소드 호출하고 돌려받은 값을 출력.
정수를 반환하는 getCount() 메소드의 시작점. count의 값 4을 메소드로 호출했던 ⓰번으로 반환.
✶ 객체 변수 _inst, conn1, conn2, conn3은 모두 같은 heap 영역의 주소를 가리키고 있으므로 해당 heap의 영역에 저장된 내용을 공유하게 됨.
⓰ ⓯번에서 돌려 받은 값 4를 출력.



참고,
기출 문제 : https://newbt.kr/시험/정보처리기사%2520실기
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023.

profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글