ProgrammingLanguage/Java
자바(Java) 싱글턴 패턴(Singleton Pattern)
sskl660
2021. 1. 23. 12:28
*싱글턴 패턴
->객체가 1개의 인스턴스만 가져야 하는 경우 사용하는 자바의 디자인 패턴 중 하나이다.
->장점 : 인스턴스가 1개만 생성되기 때문에 효율적인 메모리 관리가 가능하다.
->단점 : 동시에 해당 인스턴스를 공유하는 환경(특히, Multithread 환경)에서 동시성(Concurrency) 문제 고려로 인하여 프로그램의 유연성이 감소한다.
※이러한 동시성의 문제를 해결한 것을 Thread-safe하다 라고 한다. 여러가지 싱글턴 패턴(이른 초기화 방식, 게으른 초기화 방식...)이 존재하는데, 이 글에서는 이른 초기화 방식만 다룬다.
*싱글턴 패턴 : 이른 초기화(Eager Initialization)
->이른 초기화는 static 예약어를 사용하여 정적 바인딩(Static binding)을 통해 컴파일 시점에 인스턴스를 메모리에 등록하여 사용하는 방식이다. 최초로 클래스가 로딩 될 때 객체가 생성되기 때문에 Thread-safe하지만, static의 특성으로 인해 로딩 되는 시점부터 객체가 항상 생성되어 있기 때문에, 비효율적일 수 있는 문제가 있다.
class BookMgr {
// private 예약어를 사용하여 외부에서 해당 변수에 접근하지 못하도록 막는다.
// static 예약어를 사용하여 클래스가 최초 로딩될 때 BookMgr 인스턴스가 생성된다.
private static BookMgr manager = new BookMgr();
// private 예약어를 사용하여 외부에서 BookMgr 생성자를 사용 못하도록 막는다.
private BookMgr() {
}
// public 예약어를 사용하여 해당 클래스 메서드를 통해서만 생성된 1개의 인스턴스를 반환하도록 한다.
public static BookMgr getInstance() {
return manager;
}
}
public class SingletonTest{
public static void main(String[] args) {
// 클래스 메서드를 이용하여 1개 뿐인 BookMgr 인스턴스를 호출한다.
BookMgr manager = BookMgr.getInstance();
}
}