
서론 및 문제
지난번에는 딕셔너리 관련 정보처리기사 문제를 풀어보았다. 해당 포스팅으로 가면 여기로 가면 된다. 이번 포스팅에서는 JAVA 싱글턴패턴에 해당하는 문제를 풀어볼 것이다. 우선 아래 코드의 결과값을 손코딩을 통해서 도출하고 아래 문제 풀이를 보는 걸 추천한다. 아래 문제는 2024년 1회차 실기 문제임을 참고바란다.
class Connection {
private static Connection _inst;
private int count;
private Connection() {
count = 0;
}
public static Connection getInstance() {
if (_inst== null) {
_inst= new Connection();
}
return _inst;
}
public void count() {
count++;
}
public int getCount() {
return count;
}
}
public class Main {
public static void main(String[] args) {
Connection conn1 =
Connection.getInstance();
conn1.count();
Connection conn2 =
Connection.getInstance();
conn2.count();
Connection conn3 =
Connection.getInstance();
conn3.count();
conn1.count();
System.out.print(conn1.getCount());
}
}
문제 풀이
우선 Connection conn1 = Connection.getInstance()에서, Connection.getInstance() 형태를 봤을 때 이것이 정적 메서드임을 알아야 된다. 바로 클래스로 접근하는 것이다. 그래서 getInstance() 함수로 가면, if문으로 _inst가 없으면 -> _inst = new Conneciton()이라고 한다. 이 때 _inst에 Connection 객체가 담긴 것이다. 이후 다시 메인 함수로 돌아가서 conn1.count()를 하면 conn1에 있는 count 변수가 +1이 되는것.
이제 두번째 Connection conn2 = Connection.getInstance()에서 새로운 객체를 만들고 getInstance를 한다. 누군가가 이 때, _inst가 있는가?라고 물으면 있다고 해야된다. _inst는 static이기 때문이다. 클래스상에서는 다 공유하는 것임. 그렇기 때문에 conn2.count()에서 count()를 선언하면 private int count에 +1을 하게 된다. 즉, 이 때 count는 2가 되는것. 아래도 똑같이 conn3.count()로 count는 3이되며, 마지막에 conn1.count()를 함으로써 최종 count는 4가 된다.
Private인데 main함수에서 어케 바꿨는가?
본 문제에서 count는 private로 선언되어 있어서 직접 접근은 할 수 없다. 그래서 System.out.print(conn.count);를 선언하면 오류가 뜬다. 허지만, 같은 클래스 안에서는 private가 접근이 가능하며, 그걸 pubilc void count가 해내고 있다. 비유를 들자면 고-급-시계를 사러 갔을 때 main함수(=손님) - public void count()(=직원) - private int count(=고급 시계)라고하면 맞을까.. 물론 고오오급 시계는 손님은 직접 만질 수 없다. 직원한테 "님아 저거 좀 눌러주세요." , "저것 좀 들어주세요" 정도만 시킬 수 있는 거지. 당장 떠오른 비유가 이건데 더 적합한 비유가 있다면 댓글 부탁드립니다.
'IT, Computer' 카테고리의 다른 글
[정보처리기사] 프로그래밍 언어 기출 풀이 (5) JAVA equal, == 차이 (0) | 2025.04.11 |
---|---|
티스토리 hELLO 스킨 적용 방법 (0) | 2025.04.10 |
[정보처리기사] 프로그래밍 언어 문제 풀이 (3) - 딕셔너리 (0) | 2025.04.08 |
[정보처리기사] 프로그래밍 언어 문제 풀이 (2) - 정적 변수 (0) | 2025.04.07 |
[정보처리기사] 프로그래밍 언어 문제 풀이 (1) - 포인터 (0) | 2025.04.06 |