1. Singleton패턴이란?
- 인스턴스가 하나만 존재하는 것을 보증하는 패턴
- Singleton은 클래스변수로 정의된다.
- Singleton 클래스의 인스턴스에서 초기화한다.
- Singleton 클래스를 로드할 때 단 한 번만 초기화
- Singleton 클래스의 생성자는 private이다.
- Singleton 클래스 외부에서 생성자 호출을 금지하기 위함
- Singleton 클래스의 인스턴스를 얻는 메소드로 getInstance(변경가능)를 정의
public class Singleton {
// 1. Singleton은 클래스변수로 정의된다.
private static Singleton singleton = new Singleton();
// 2. Singleton의 생성자는 private이다.
private Singleton() {
System.out.println("인스턴스를 생성했습니다.");
}
// 3. Singleton 클래스의 인스턴스를 얻는 메서드를 정의 해준다.
public static Singleton getInstance() {
return singleton;
}
}
2. enum을 이용한 Singleton
- enum의 요소는 상수로서 인스턴스의 유일성을 보증받는다.
enum Singleton {
INSTANCE;
public void hello() {
System.out.println("hello is called.");
}
}
- 멀티스레드 환경에서 안전함: enum 타입은 자바가 내부적으로 이미 스레드 안전(thread-safe)을 보장하는 방식으로 처리하므로 멀티스레드 환경에서도 안전하게 동작합니다.
- 직렬화 문제 해결: enum은 기본적으로 직렬화가 제대로 처리됩니다. enum 인스턴스는 JVM에 의해 자동으로 생성되고 관리되므로, 직렬화된 객체로 변환해도 동일한 인스턴스가 반환됩니다.
- 간단한 구현: enum을 사용하면 코드가 매우 간단하고, enum을 이용한 싱글톤은 추가적인 코드나 복잡한 초기화 과정을 필요로 하지 않습니다.
'디자인 패턴' 카테고리의 다른 글
5. Strategy - 패스트캠퍼스 백엔드 부트캠프 3기 (1) | 2025.02.17 |
---|---|
4. Template Method - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.11 |
3. Prototype - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.10 |
2. Flyweight(추가예정) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.06 |