정보 처리 기사 24년 1회 1번 문제

2024. 7. 7. 17:21자격증 연습/정보처리기사 실기 대비 - 문제풀이

1.  다음 Java 코드에서 알맞는 출력 값을 작성하시오.

 

 

class Connection {


    // _inst = null 객체를 가리 키는 변수룰 null로 초기화, 객체 참조 없음
    private static Connection _inst = null;

    private int count = 0;
    //인스턴스 변수(count) = 0으로 초기화, 외부 클래스 에서 참조하지 못하게 보호

    static public Connection get() {
        if(_inst == null) {
            _inst = new Connection();
            return _inst;
        }
        return _inst;
    }
    /* get 메서드()  만약 _inst 가  null 이면
       인스턴스  connection을 생성 후 _inst 반환 만약 값을 가지고 있으면 _inst 반환  */

    public void count() {
        count++;
    }
 //count 메서드 count의 값을 후위증감
    public int getCount() {
        return count;
    }
}
 //get count() 메서드 count 를 반환

public class main {

    public static void main(String[] args) {

        Connection conn1 = Connection.get();
        /*
        connection.get() 호출  이 시점에서 _inst 가  null 이므로
        Connection 인스턴스 생성, conn1 객체는 connrction 인스턴스를 참조중임
         */

        conn1.count();
        /*count 메서드 호출 호출이후 count의 값은 1 증감 count = 1 */

        Connection conn2 = Connection.get();
        /*
        connection.get() 호출  이 시점에서 _inst 가
        Connection 인스턴스를 가지고 있으므로 기존의 Connection 인스턴스를 그냥 반환
        conn2 객체는 connrction 인스턴스를 참조중임
         */
        conn2.count();
        /* conn2 객체가 count 메서드 호출 다만 conn2 conenection 인스턴스를 참조하고 있음
         호출이후 count의 값은 1 증감 count = 2 */
        Connection conn3 =  Connection.get();
        /*
        connection.get() 호출  이 시점에서 _inst 가
        Connection 인스턴스를 가지고 있으므로 기존의 Connection 인스턴스를 그냥 반환
        conn3 객체는 connrction 인스턴스를 참조중임
         */
        conn3.count();
        /*count 메서드 호출 호출이후 count의 값은 1 증감 count = 3 */
        conn1.count();
        /*count 메서드 호출 호출이후 count의 값은 1 증감 count = 4 */
        System.out.print(conn1.getCount());
        /*conn1.getCount()로 getCount() 메서드를 호출 기존 count를 반환 하므로 4*/
    }
   /*만약 싱글톤 패턴을 깨고 싶다면 Connection conn2 = new Connection.get(); 형태로
   선언하면 새로운 인스턴스  Connection 생성으로 conn1 과 conn2 는 다른 인스턴스를 가르키게되어 
   싱글톤 패턴이 깨지게됨 + 에러도 덤 */
}

 

 

 

싱글톤 패턴 코드입니다.  싱글톤 패턴은 클래스의 객체는 단 한개만 생성하는 디자인 패턴 으로 클래스내의 객체가 단 한개이기 때문에 인스턴스 또한 한개입니다.

 

그렇기에 메인클래스의 객체 conn1 , conn2 , conn3 는 connection 클래스의 단일 인스턴스를 참조하는 객체이기 때문에 count() 메서드를 통해 모두 connection인스턴스의 변수 count의 값을 증가시키는 것입니다.

 

private int count = 0;
/*클래스 Connection의 인스턴수 변수 count 선언 */