언어/java
[Java] 6. 클래스 (6) - singleton
젼젼39
2025. 5. 17. 14:55
6.15 싱글톤 패턴_이어서
* 싱글톤 패턴 : 클래스의 인스턴스를 오직 하나만 생성하고, 이 인스턴스에 전역적으로 접근할 수 있도록 보장하는 디자인 패턴
- 사용 예시 : 로깅(하나의 로거 인스턴스로 여러 곳에서 로그 기록을 남기고, 일관성을 유지할 때), 설정 관리(시스템 전체에서 하나의 설정 객체만 사용해야 할 때), 자원을 공유해야 할 때 등
예를 들어, 여러 곳에서 사용할 수 있는 공용 카운터가 있을 때.
(이 카운터는 프로그램 전체에서 단 하나만 존재, 어디서든 할당된 값을 증가시키거나 읽을 수 있어야 함)
public class Counter {
// 카운터의 유일한 인스턴스를 저장할 변수
private static Counter instance;
// 카운터 값 초기화
private int count = 0;
// private 생성자를 사용, 외부에서 객체를 생성하지 못하게 막음.
private Counter() {}
// 인스턴스 반환 메서드 -> new()가 아니라 이걸 통해 인스턴스를 만든다!!
// (중요) 이걸 호출하면 항상 같은 인스턴스를 반환함
// --> 모두 같은 객체이기 때문에 값을 공유함
public static Counter getInstance() {
if (instance == null) {
instance = new Counter();
}
return instance;
}
// 카운터 증가 메서드
public void increment() {
count++;
}
// 현재 카운터 값 반환
public int getCount() {
return count;
}
}
// 현재 카운터 값 반환
public int getCount() {
return count;
}
}
public class Main {
public static void main(String[] args) {
Counter counter1 = Counter.getInstance();
Counter counter2 = Counter.getInstance();
// increment 메서드를 통해 증가. 다른 변수를 통해 해당 메서드 사용했음!
counter1.increment();
counter2.increment();
//다른 변수를 통해 increment 메서드 사용했지만 값은 같이 증가함.
System.out.println(counter1.getCount()); // 출력: 2
System.out.println(counter2.getCount()); // 출력: 2
}
}
- Counter 클래스로는 오직 하나의 인스턴스만 만들 수 있음
- getInstance()를 호출하면, 항상 같은 인스턴스를 반환하기 때문에, 어디서든 increment(), getCount()로 증가, 읽기 가능
- counter1, counter2는 모두 같은 객체임 -> 값을 공유하게 됨