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();
	}
}