싱글톤 패턴(Singleton Pattern)은 생성 패턴 중 하나로, 특정 클래스의 인스턴스가 하나만 생성되고, 어디서든지 그 인스턴스에 접근할 수 있도록 하는 패턴입니다. 주로 애플리케이션에서 전역적인 접근이 필요한 객체에 사용됩니다. 싱글톤 패턴은 인스턴스를 하나만 유지하여 자원 낭비를 방지하고, 여러 클래스가 동일한 자원에 접근할 때 일관성을 유지할 수 있습니다.
Spring Boot에서 싱글톤 패턴은 주로 @Service나 @Component 애노테이션을 통해 구현됩니다. 하지만 기본적인 싱글톤 패턴의 예제를 직접 구현해보겠습니다.
자바에서는 싱글톤 패턴을 구현할 때 정적 변수와 정적 메서드를 사용합니다. 멀티스레드 환경에서도 안전하게 싱글톤 인스턴스를 생성하기 위해 synchronized 키워드를 사용합니다.
public class Singleton {
// 유일한 인스턴스를 저장할 정적 변수
private static Singleton instance;
// 생성자를 private으로 정의하여 외부에서 직접 인스턴스화하지 못하도록 함
private Singleton() {}
// 인스턴스를 반환하는 정적 메서드
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// 예제 메서드
public void showMessage() {
System.out.println("Hello from Singleton!");
}
}
// 사용 예시
public class Main {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
singleton.showMessage();
}
}
파이썬에서는 메타클래스를 사용하여 싱글톤 패턴을 구현할 수 있습니다. 메타클래스는 클래스의 생성 방식을 제어할 수 있는 강력한 도구로, 여기서 _instances 딕셔너리를 사용하여 이미 생성된 인스턴스를 재사용합니다.
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
instance = super().__call__(*args, **kwargs)
cls._instances[cls] = instance
return cls._instances[cls]
class Singleton(metaclass=SingletonMeta):
def __init__(self):
self.value = None
def show_message(self):
print("Hello from Singleton!")
# 사용 예시
singleton1 = Singleton()
singleton2 = Singleton()
singleton1.value = "First instance"
print(singleton2.value) # First instance
singleton1.show_message() # Hello from Singleton!
singleton2.show_message() # Hello from Singleton!
구조패턴 중, 어댑터(Adapter)패턴에 대하여... (0) | 2024.07.14 |
---|---|
생성패턴 중, 빌드패턴에 대하여.. (0) | 2024.07.14 |
댓글 영역