반응형
⛏️.생성 패턴 중 하나인 싱글턴 패턴에 대해서 알아보겠습니다.
싱글턴은 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공하는 생성 디자인 패턴입니다.
-> 즉. 메모리 상에 고유한 인스턴스를 특정 시점에 인스턴스를 하여서 사용하기 위한 곳에서 어느 곳에서든 접근이 가능하게 하는 것 입니다.
내용이 크게 어렵지 않아서 먼저 코드로 예제를 들겠습니다.
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接続プールなど、アプリ全体で共通して使いたいリソースに適しています。
ただし、多くの場所からアクセスされるため、依存関係が複雑になりやすく、ユニットテストが難しくなる欠点もあります。
반응형