목차
- 싱글톤 패턴이란?
- 싱글톤 패턴의 필요성 설명
- 싱글톤 패턴의 구현 예제
- 장단점 설명
- 다양한 구현 예제
1. 싱글톤 패턴이란?
싱글톤 패턴은 객체의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다.
즉, 클래스 내부에서 해당 클래스의 객체를 하나만 생성하고, 생성된 객체를 전역적으로 접근 가능하게 만드는 것을 말합니다.
2. 싱글톤 패턴의 필요성 설명
싱글톤 패턴은 어떤 클래스가 단 하나의 인스턴스만을 가져야 하거나, 여러 곳에서 하나의 자원을 공유해야 하는 경우에 사용됩니다. 예를 들어, 설정 정보나 로그 기록을 관리하는데에 사용할 수 있습니다.
3. 싱글톤 패턴의 구현 예제
싱글톤 패턴의 구현은 보통 다음과 같은 방식으로 이루어집니다.
public class Singleton {
private static Singleton instance;
private Singleton() {
// private 생성자로 외부에서 인스턴스를 생성하지 못하도록 함
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
위의 예제에서 getInstance() 메서드를 호출하면 싱글톤 객체를 반환합니다.
최초로 호출될 때 인스턴스가 생성되며, 이후로는 항상 같은 인스턴스를 반환합니다.
4. 장단점 설명
싱글톤 패턴은 다음과 같은 장단점이 있습니다.
- 장점:
- 메모리 절약: 객체를 하나만 생성하여 메모리를 절약할 수 있습니다.
- 전역적 접근성: 어디서든지 해당 인스턴스에 접근할 수 있습니다.
- 단점:
- 테스트 어려움: 의존성을 갖는 코드에서 싱글톤 객체를 참조하면 테스트가 어려워질 수 있습니다.
- 멀티스레드 문제: 여러 스레드에서 동시에 getInstance()를 호출하면 객체가 여러 번 생성될 수 있습니다.
5. 다양한 구현 예제
싱글톤 패턴은 위의 예제처럼 간단하게 구현할 수도 있고, 더욱 복잡한 방식으로 구현할 수도 있습니다. 예를 들어, Double-Check Locking, Enum, 정적 내부 클래스 등의 방법으로 구현할 수 있습니다.
// Double-Check Locking 예제
public class Singleton {
private static volatile Singleton instance;
private Singleton() {
// private 생성자로 외부에서 인스턴스를 생성하지 못하도록 함
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
// 정적 내부 클래스 예제
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton() {
// private 생성자로 외부에서 인스턴스를 생성하지 못하도록 함
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
싱글톤 패턴을 구현할 때에는 멀티스레드 문제에 주의하고, 필요에 따라 다양한 방식으로 구현하는 것이 좋습니다.
반응형