Singleton 패턴
<aside>
1️⃣ Singleton 패턴의 개념
</aside>
- Singleton 패턴은 객체지향 프로그래밍에서 사용되는 디자인 패턴으로, 클래스의 인스턴스가 오직 한 개만 생성되도록 보장하는 패턴이다.
이는 전역적인 접근이 필요한 객체에 대해 단 하나의 인스턴스를 생성하고, 이를 모든 사용자에게 제공한다.
<aside>
2️⃣ Singleton 패턴은 주로 다음과 같은 상황에 활용된다.
</aside>
- 전역적인 리소스에 접근해야 하는 경우
- 설정 정보, 로그 기록 등의 중요한 데이터를 관리해야 하는 경우
- 비용이 큰 작업을 수행하는 경우
<aside>
2️⃣ Singleton 패턴의 구현 방법
</aside>
- Singleton 패턴을 구현하는 방법은 여러 가지가 있지만, 일반적으로 다음과 같은 특징을 갖는다.
- 프라이빗 생성자(private constructor):
Singleton 클래스는 외부에서 직접 인스턴스를 생성하지 못하도록 생성자를 private으로 선언한다.
이로써 외부에서 new 키워드를 사용하여 인스턴스를 생성하는 것을 방지한다.
- 정적 메서드(static method)로 유일한 인스턴스 반환:
Singleton 클래스 내부에 자신의 유일한 인스턴스를 담을 정적 필드(static field)를 선언하고, 이를 반환하는 정적 메서드(static method)를 제공한다.
이를 통해 Singleton 클래스의 인스턴스에 접근할 수 있다.
- 지연 초기화(Lazy Initialization):
인스턴스가 필요한 시점에서 인스턴스를 생성한다. 처음으로 인스턴스가 요청되기 전까지는 인스턴스가 생성되지 않는다.
이를 통해 자원의 낭비를 방지할 수 있다.
- 스레드 안전성(Thread Safety):
Singleton 패턴은 다중 스레드 환경에서 안전하게 동작해야 한다. 동시에 여러 스레드가 getInstance() 메서드에 접근할 때 문제가 발생하지 않도록 스레드 안전성을 보장해야 한다.
<aside>
3️⃣ 자바의 Singleton 패턴 예시코드
</aside>
public class Singleton {
private static Singleton instance;
private Singleton() {
// private 생성자
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- 위의 코드에서
Singleton
클래스는 인스턴스가 단 하나만 생성되도록 보장한다.
**instance
**라는 정적 필드를 선언하고, getInstance()
메서드를 통해 유일한 인스턴스를 반환하게 된다.
private Singleton()
:
클래스의 생성자를 private으로 선언하여 외부에서 인스턴스를 직접 생성하는 것을 막는다.