반응형
객체의 인스턴스가 오직 1개만 생성되도록 하는 패턴
생성자는 외부에서 호출이 불가하도록 private 으로 지정한다.
> 인스턴스를 오직 한개로만 가져감으로써 메모리 측면에서의 장점
최초 한번의 new 연산자를 통해 고정된 메모리 영역을 사용하기에 메모리 낭비를 방지한다.
이미 생성된 인스턴스를 활용함으로 속도에도 이점이 있다.
> 클래스 간 데이터 공유가 쉽다
싱글톤의 인스턴스는 전역으로 사용되기에 다른 클래스의 인스턴스들이 접근해 사용이 가능하다.
하지만 여러 클래스 인스턴스에서 싱글톤 인스턴스에 동시에 접근할 경우 동시성 문제 발생 가능 유의
- 구현 코드가 많이 필요?
- 자원을 공유하기에 테스트가 어렵다 >
- 테스트가 격리된 환경에서 후행되면 매번 인스턴스 상태를 초기화 해줘야 함
- 그렇지 않으면 전역에서 상태르 ㄹ공유하기에
- 의존 관계상 클라이언트가 구체 클래스에 의존..
- 자식 클래스 생성 불가
- 내부 상태 변경 어려움
package designPattern;
public class Singleton {
private static Singleton st = new Singleton();
private Singleton() {}
public static Singleton getSingleton() {
return st;
}
}
class SingletonCall {
public static void main(String[] args) {
// 기본 생성자가 private 이므로 getSingleton 메소드를 통해서만 호출 가능
Singleton singleton = Singleton.getSingleton();
}
}
반응형
'Java > Design Pattern' 카테고리의 다른 글
빌더 패턴 Builder (0) | 2023.01.17 |
---|---|
컴포짓 패턴 Composite (0) | 2023.01.16 |
프로토타입 패턴 Prototype (0) | 2023.01.16 |
템플릿 메소드 패턴 (0) | 2023.01.11 |
추상 팩토리 패턴 (0) | 2023.01.11 |