Java/디자인 패턴

생성 패턴 _ 싱글턴 패턴

minquu 2025. 4. 23. 12:15
반응형

⛏️.생성 패턴 중 하나인 싱글턴 패턴에 대해서 알아보겠습니다.

 

싱글턴은 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근​(액세스) 지점을 제공하는 생성 디자인 패턴입니다.

 -> 즉. 메모리 상에 고유한 인스턴스를 특정 시점에 인스턴스를 하여서 사용하기 위한 곳에서 어느 곳에서든 접근이 가능하게 하는 것 입니다. 

 

내용이 크게 어렵지 않아서 먼저 코드로 예제를 들겠습니다. 

 

public final class Singleton {
    private static Singleton instance;
    public String value;

    private Singleton(String value) {
        // The following code emulates slow initialization.
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        this.value = value;
    }

    public static Singleton getInstance(String value) {
        if (instance == null) {
            instance = new Singleton(value);
        }
        return instance;
    }
}

- 기본적인 싱글턴입니다. 

  getInstance 메서드를 통해서 이 클래스에 있는 인스턴스 (자기자신)를 반환을 합니다. 

 

 

👍. 장점

- 리턴을 메서드로만 하기 때문에 하나의 인스턴트를 갖는다는 걸 확신함

- 전역 접근이 가능하기 때문에 개발이 쉬워짐

- 첫 생성 또는 호출시 메모리에 적재하기 때문에 요청 횟수가 적음

 

👊. 단점

- SRP (단일 책임 원칙)를 위반함

  - 사방에서 접근하기 때문에

- 난잡한 커플링이 생길수 있음

- 다중 쓰레드 환경에서는 싱글턴 객체가 여러번 생길 수 도 있음

- 유닛 테스트를 하기가 어려운 경우가 맞음

 

🤩.사용 하는 곳

설정 객체 (Configuration) 앱 전역에서 동일한 환경 설정 정보를 공유할 때
로깅 시스템 (Logger) 로그 기록은 하나의 일관된 흐름으로 관리돼야 하기 때문에
스레드 풀 (Thread Pool) 리소스를 효율적으로 관리하기 위해 하나만 유지
캐시 (Cache) 같은 데이터를 여러 객체에서 공유할 때
데이터베이스 연결 풀 (Connection Pool) DB 연결을 재사용해서 성능을 높일 때
윈도우 매니저 or 시스템 관리자 시스템에 하나의 책임자 역할 객체가 필요할 때

 

 

-----

🇯🇵

シングルトンパターンは、クラスのインスタンスを1つだけ生成し、どこからでもアクセスできるようにするデザインパターンです。

設定管理、ログ記録、DB接続プールなど、アプリ全体で共通して使いたいリソースに適しています。

ただし、多くの場所からアクセスされるため、依存関係が複雑になりやすく、ユニットテストが難しくなる欠点もあります。

 

반응형