공부합시다/DesignPattern

[Design Pattern] 싱글톤(Singleton) 패턴

2023. 4. 9. 08:16
목차
  1. 싱글톤(Singleton) 패턴이란?
  2. 싱글톤 패턴의 장점
  3. 글로벌 액세스
  4. 리소스 소비 감소
  5. 싱글톤 패턴의 단점
  6. 전역 상태 (Global State)
  7. 긴밀한 결합
  8. 구현 예제

싱글톤(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
  1. 싱글톤(Singleton) 패턴이란?
  2. 싱글톤 패턴의 장점
  3. 글로벌 액세스
  4. 리소스 소비 감소
  5. 싱글톤 패턴의 단점
  6. 전역 상태 (Global State)
  7. 긴밀한 결합
  8. 구현 예제
'공부합시다/DesignPattern' 카테고리의 다른 글
  • [Design Pattern] 데코레이터(Decorator) 패턴
  • [Design Pattern] 옵저버(Observer) 패턴
  • [Design Pattern] 스트래티지(Strategy) 패턴
Lede_
Lede_
개발 일지, 아이디어 등 Lede의 기록을 수집하고 기록하는 공간
반응형
Lede_
Lede's Archive
Lede_
전체
오늘
어제
  • 전체보기 (32)
    • 마인크래프트 (9)
      • 스크립트 (8)
      • 플러그인 (1)
    • Unreal Engine (7)
      • 팁 (7)
      • Material (0)
    • 공부합시다 (9)
      • DesignPattern (4)
      • Java, Android (5)
    • 책 리뷰 (1)
      • Clean Code (1)
    • 프로젝트 (0)
    • 튜토리얼 (6)
      • 마인크래프트 스크립트 (4)
      • 마인크래프트 플러그인 (2)
hELLO · Designed By 정상우.
Lede_
[Design Pattern] 싱글톤(Singleton) 패턴
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.