코딩일기/자격증

[정보처리기사] [Java] static 변수와 메서드 | 싱글톤 패턴 | 정보처리기사 실기 기출문제(2024년 1회)

jhy_2023 2025. 3. 23. 23:55
728x90
반응형

2024년 1회 정보처리기사 실기 기출문제

문제

다음 Java 코드의 실행 결과를 구하시오.

class Connection {
 
    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 main {  
 
    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

반응형

해설

🔎 참고

2025.01.18 - [코딩일기] - [Java] 객체지향의 핵심 개념: 상속, 오버로딩, 오버라이딩, 하이딩

 

[Java] 객체지향의 핵심 개념: 상속, 오버로딩, 오버라이딩, 하이딩

📌 객체지향 프로그래밍의 주요 특징객체지향 프로그래밍(OOP, Object-Oriented Programming)은 다음과 같은 네 가지 주요 특징을 가집니다:1️⃣ 캡슐화(Encapsulation)데이터를 외부에서 직접 접근하지 못

august-jhy.tistory.com

 

2025.03.23 - [코딩일기/자격증] - [정보처리기사] [Java] static 변수와 메서드 이해 | 싱글톤 패턴 활용 | 정보처리기사 실기 기출문제(2021년 3회)

 

[정보처리기사] [Java] static 변수와 메서드 이해 | 싱글톤 패턴 활용 | 정보처리기사 실기 기출문제

2021년 3회 정보처리기사 실기 기출문제문제다음 Java 코드의 실행 결과를 구하시오.class Connection { private static Connection _inst = null; private int count = 0; static public Connection get() { if(_inst == null) { _inst = new

august-jhy.tistory.com

📌기본 개념

문제 코드는 싱글톤(Singleton) 패턴을 사용하여 Connection 클래스의 인스턴스를 하나만 생성하고 공유하는 방식으로 동작합니다. 

1️⃣ static 변수와 메서드

static 변수(정적 변수)는 클래스에 속하는 변수로, 객체마다 별도로 존재하는 것이 아니라 클래스 로드 시 한 번만 생성되고 모든 객체가 공유합니다.

🔹 static 변수

class Example {
    static int count = 0; // 모든 객체가 공유하는 변수
}

public class Main {
    public static void main(String[] args) {
        Example obj1 = new Example();
        Example obj2 = new Example();
        
        obj1.count++;
        obj2.count++;
        
        System.out.println(Example.count); // 출력: 2
    }
}

위 코드에서 countstatic 변수이므로 obj1obj2동일한 메모리 공간을 공유합니다. 따라서 obj1.count++obj2.count++을 실행하면 count 값이 누적됩니다.

🔹 static 메서드

static 메서드는 객체 생성 없이 호출할 수 있는 메서드입니다. 클래스명으로 직접 호출하며, 인스턴스 변수(멤버 변수)에는 접근할 수 없습니다. static 메서드는 클래스 레벨에서 호출되기 때문에 객체를 생성하지 않고도 호출할 수 있지만, 객체의 특정 인스턴스 변수에 접근하려면 객체를 생성해야만 합니다.

class Example {
    static void show() {
        System.out.println("Hello, static method!");
    }
}

public class Main {
    public static void main(String[] args) {
        Example.show(); // 객체 생성 없이 호출 가능
    }
}

위 코드에서 Example.show();처럼 객체를 생성하지 않고도 호출 가능하다는 점이 static 메서드의 특징입니다.

2️⃣ 싱글톤 패턴

🔹 싱글톤 패턴 정의

싱글톤(Singleton) 패턴은 클래스의 인스턴스를 단 하나만 생성하여 이를 여러 곳에서 공유하도록 만드는 패턴입니다. 보통 데이터베이스 연결, 설정 관리 객체 등에서 사용됩니다.

🔹 싱글톤 패턴 구현

싱글톤 패턴은 private 생성자 + static 변수 + static 메서드를 이용하여 구현됩니다.

class Singleton {
    private static Singleton instance = null; // 단 하나의 객체 저장
    
    private Singleton() {} // private 생성자
    
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

public class Main {
    public static void main(String[] args) {
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        
        System.out.println(obj1 == obj2); // true (같은 객체)
    }
}

위 코드에서 Singleton.getInstance();를 호출할 때마다 같은 객체가 반환되므로, obj1 == obj2의 결과는 true가 됩니다.

728x90

📌문제 해설

class Connection {

    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 main {  

    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());
    }

}
  • Connection 클래스에는 static 변수 _inst가 있습니다. 이 변수는 Connection 클래스의 모든 인스턴스가 공유하는 변수입니다. _inst = null은 Connection 객체가 생성되지 않은 상태를 의미합니다.

  • Connection conn1 = Connection.get();
    • get() 호출 → _inst == null이므로 새로운 Connection 객체 생성
    • conn1은 해당 객체를 참조
  • conn1.count();
    • count 값 증가 → count = 1
  • Connection conn2 = Connection.get();
    • get() 호출 → 기존 _inst 객체 반환
    • conn2conn1과 같은 객체를 참조
  • conn2.count();
    • count 값 증가 → count = 2
  • Connection conn3 = Connection.get();
    • get() 호출 → 기존 _inst 객체 반환
    • conn3도 동일한 Connection 객체를 참조
  • conn3.count();
    • count 값 증가 → count = 3
  • conn1.count();
    • count 값 증가 → count = 4
  • System.out.print(conn1.getCount());
    • getCount() 호출 → count = 4 반환
    • 결과: 4 출력
  • 모든 Connection 객체가 동일한 인스턴스를 공유하므로 count 변수는 누적됩니다. 따라서 최종 출력값은 4가 됩니다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형