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
}
}
위 코드에서 count는 static 변수이므로 obj1과 obj2가 동일한 메모리 공간을 공유합니다. 따라서 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가 됩니다.
📌문제 해설
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 객체 반환
- conn2도 conn1과 같은 객체를 참조
- 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가 됩니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'코딩일기 > 자격증' 카테고리의 다른 글
[정보처리기사] [ C ] 문자열 역순 출력 | 2024년 1회 정보처리기사 실기 기출문제 (0) | 2025.03.25 |
---|---|
[정보처리기사] [ C ] 삼항 연산자와 비트 연산자(시프트 연산자) 활용 | 2024년 1회 정보처리기사 실기 기출문제 (0) | 2025.03.25 |
[정보처리기사] [Java] static 변수와 메서드 이해 | 싱글톤 패턴 활용 | 정보처리기사 실기 기출문제(2021년 3회) (0) | 2025.03.23 |
[정보처리기사] [Java] 논리 연산자를 활용한 조건문 분석 | 연산자 우선순위 | 정보처리기사 실기 기출문제 (0) | 2025.03.23 |
[정보처리기사] [ C ] 포인터 배열과 주소 참조 | 정보처리기사 실기 기출문제 (0) | 2025.03.20 |