-
자바(Java) 싱글턴 패턴(Singleton Pattern)ProgrammingLanguage/Java 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(); } }
'ProgrammingLanguage > Java' 카테고리의 다른 글
자바(Java) BufferedReader 클래스 (0) 2021.01.18 스트림(Stream)과 자바(Java)의 Scanner 클래스 (0) 2021.01.14 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) (0) 2021.01.13