반응형
싱글톤(Singleton) 패턴
- 클래스의 인스턴스가 하나임을 보장하고, 접근할 수 있는 전역적인 접근점 제공 !
딱 하나의 인스턴스만 생성.
생성된 인스턴스를 어디서든 참조할 수 있게 한다.
실제로 생성되는 인스턴스는 하나 ! (객체 생성을 한번으로 제한)
생성자가 또 호출되어도 이미 생성된 인스턴스를 리턴해주는 방식.
장점
- 메모리 낭비 방지
- 싱글톤 인스턴스를 사용하면 다른 인스턴스 간에 데이터 공유가 쉬움
- 오직 하나의 인스턴스가 존재하는 것을 보증하기에 개발 시 실수를 줄일 수 있음
단점
- 전역변수보다 사용하기 불편
- 싱글톤 역할이 커지면 결합도가 높아져 객체지향 설계원칙에서 어긋날 수 있음
- 멀티쓰레드 환경에서 동기화 처리를 하지 않으면 컨트롤이 어려움
- 인스턴스의 파괴 시점을 컨트롤 하기 어려움
예시 코드
- 이른 초기화 방식 : 클래스 초기화 시점에 메모리에 등록해서 사용하는 방식
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return uniqueInstance;
}
}
구현하기 가장 간단하지만, 처음부터 메모리를 잡고 들어가기 때문에 효율적이진 않음
예외 처리도 불가능.
- 늦은 초기화 방식 : 필요할 때 객체를 생성하는 방식
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
}
}
메모리 점유의 단점을 보완할 수 있고 예외 처리도 가능.
하지만 멀티 쓰레드 환경에서 문제가 생길 수 있음.
두 쓰레드에서 동시에 생성한다면 ? → 다중 객체 생성 문제가 생길 수도 있음.
728x90
반응형