싱글톤(Singleton) 패턴이란?
- 시스템에 단 하나의 클래스 인스턴스만 존재하도록 하여 인스턴스에 대한 단일 액세스 지점을 제공하고 이에 따라 충돌 및 불일치를 방지한다.
싱글톤 패턴의 장점
글로벌 액세스
- 클래스에 하나의 인스턴스만 존재하고 시스템의 모든 객체가 싱글톤 클래스의 동일한 인스턴스에 액세스 할 수 있기 때문에, 일관된 동작 및 데이터 공유가 가능하다.
리소스 소비 감소
- 시스템 전체에서 싱글톤 클래스의 인스턴스가 하나만 생성되기 때문에 사용하는 리소스의 양이 줄어든다.
싱글톤 패턴의 단점
전역 상태 (Global State)
- 싱글톤 클래스의 인스턴스는 시스템의 모든 개체에서 액세스 및 수정이 가능하기 때문에 잠재적으로 의도하지 않은 동작과 버그가 발생할 수 있다.
긴밀한 결합
- 싱글톤 패턴은 싱글톤 인스턴스의 구현에 의존하기 때문에 싱글톤 인스턴스가 자주 사용되는 시스템의 경우 개체간의 긴밀한 결합으로 이어질 수 있다.
구현 예제
다음은 게임의 구성 요소를 불러오는 시스템을 예로 들어 설명한 싱글톤 패턴의 예제이다
먼저 싱글톤 패턴의 클래스를 정의한다.
public class GameConfig {
/**
멀티스레드 환경에서 단 하나의 객체만 생성됨을 보장하기 위해
Initialization on demand holder 방식으로 객체 초기화
*/
private static class GameConfigHolder {
public static final GameConfig INSTANCE = new GameConfig();
}
// JVM 에서 GameConfigHolder의 static field 를 초기화
public static GameConfig getInstance() {
return GameConfigHolder.INSTANCE;
}
private int maxPlayer = 0;
private GameConfig() {} // 다른 객체에서 인스턴스를 직접적으로 생성할 수 없다
public int getMaxPlayer() {
return maxPlayer;
}
}
다음은 GameConfig 의 maxPlayer 값을 출력하는 예제이다.
public static void main(String[] args) {
GameConfig config = GameConfig.getInstance();
System.out.printf("Max Player: %d", config.getMaxPlayer());
}
'공부합시다 > DesignPattern' 카테고리의 다른 글
[Design Pattern] 데코레이터(Decorator) 패턴 (0) | 2023.04.05 |
---|---|
[Design Pattern] 옵저버(Observer) 패턴 (0) | 2023.04.03 |
[Design Pattern] 스트래티지(Strategy) 패턴 (0) | 2023.04.02 |