본문 바로가기

develop/Java

싱글톤 디자인 패턴(Singleton Design Pattern)

아.. 다 써놨는데 날렸다.

 

전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우.

단 하나만 생성하는 객체를 싱글톤이라고 한다.

유일한 객체 사용을 위해 하나의 인스턴스만 생성하도록 함. 

1. 외부에서 인스턴스 생성을 하지 못하게 차단 (=private) 

2. 클래스 내에서 직접 인스턴스 생성해 외부에 리턴 (=getInstance())

3. 해당 클래스는 누구나 생성된 인스턴스를 전달받아 사용해야함 (=기존의 인스턴스 공유)

 

단 하나의 객체를 만들기 위해서

클래스 외부에서 new 생성자로 호출할 수 없도록(인스턴스 생성할 수 없도록) 막기 위해서

접근 제한자 private를 붙혀준다. 

그리고 static 변수를 하나 선언하고 자신의 객체를 생성해 초기화한다. (이 경우는 생성자 호출 가능)

이 static 변수도 private 를 붙여서 외부에서 변경하지 못하도록 막는다. 

대신 외부에서 호출할 수 있도록 getInstance() 를 선언해 자신의 객체를 리턴할 수 있도록 함.

 

class Example{
	//정적 필드
    private static Example singleton = new Example();
    
    //생성자
    private Example(){}
    
    //정적 메소드
    static Example getInstance(){
    	return singleton;
    }


}

 

=>

1. 외부에서 인스턴스 생성 불가하도록 생성자에 private 선언

 

 

2. 자신의 클래스 내에서 직접 인스턴스 생성해 멤버변수에 저장

=> 외부에서 인스턴스 생성 없이 접근해야하므로 static (즉, static 멤버변수로 선언해 클래스명만으로 접근 가능하도록)

=> 외부에서 함부로 접근 못하게 private 붙임

 

 

3. private 접근제한자가 붙은 멤버변수(생성된 인스턴스 주소값)를 외부로 리턴할 Getter 메서드 정의

=> 인스턴스 생성 없이 호출 가능해야 하므로 static 메서드로 정의한다.

 

4. 리턴받은 인스턴스를 통해 멤버변수 또는 메서드 접근 가능

SingletonClass sc = SingletonClass.getInstance();

sc.print();

 

 

'develop > Java' 카테고리의 다른 글

접근 제한자(Access Modifier)  (0) 2021.03.01
상속(Inheritance)  (0) 2021.03.01
static 메서드  (0) 2021.02.23
static  (0) 2021.02.23
코드의 재사용  (0) 2021.02.18