JAVA

[ Java ] - 싱글턴(singleton) 패턴

algml0703 2022. 9. 3. 09:02
반응형

싱글턴  (Singleton )패턴

디자인 패턴의 일종으로 static을 응용한 패턴이다. 일반적으로 하나의 클래스에서 여러 개의 인스턴스를 생성가능한 것과 다르게, 싱글턴 패턴에서 클래스를 통해 생성될 수 있는 인스턴스는 오직 하나이다. 싱글턴 패턴의 클래스를 통해 한 번 인스턴스가 생성된 이후에 호출되는 생성자는 최초에 생성된 인스턴스를 가리키게 된다. 

인스턴스를 생성하기 위해서는 new를 사용하여 생성자를 호출하는 것인데, 생성자에 private을 사용함으로써, 외부에서 생성자 호출을 통해 인스턴스를 생성하지 못하도록 한다. 대신에 getInstance()메서드를 통해 하나의 인스턴스를 반환하여 주는 것이다.

private 생성자 

public class Singleton {
    priate static final Singleton INSTANCE = new Singleton();
    // private => 클래스 외부에서 접근하지 못하도록 함
    // static 클래스 변수 -> 프로그램 전체에 공유되는 변수
    // final => 상태가 변하지 않는 경우
    
    private Singleton() {}
    // private => 외부에서 new를 사용하여 해당 클래스를 생성할 수 없다.
    // 생성자를 만들어주지 않으면, 디폴트 값으로 public 생성자가 적용되기 때문에 반드시 private으로 생성자를 만들어준다.
    
    public static Singleton getInstance() {
    // 해당 메서드를 통해 인스턴스를 받아올 수 있다. 
    // static을 사용하여 프로그램 로드시 인스턴스를 생성하도록 한다.
    // 해당 메서드를 통해 불러오는 인스턴스는 프로그램 로드시 생성된 인스턴스를 반복해서 불러오는 것이다.
    	return INSTANCE;
    }
    
}

사용할 때는 아래와 같이 사용한다.

public class SingletonTest {
	public static void main(String[] args){
    	Singleton singletonInstance1 = Singleton.getInstance();
        Singleton singletonInstance2 = Singleton.getInstance();
        
        System.out.println(singletonInstance1);
        System.out.println(singletonInstance2);
    
    }
}

위와 같이 두개의 인스턴스를 생성하고 해당 인스턴스를 출력하여 보면, 같은 메모리 공간을 가리키고 있음을 확인할 수 있다.

아래와 같이 코드의 작성하여 코드의 안전성을 더욱 높일 수 있다.

public class Singleton {
    priate static final Singleton INSTANCE = new Singleton();

    private Singleton() {}
    
    public static Singleton getInstance() {
    	if(INSTANCE == null)
        	INSTANCE = new Singleton();
    	return INSTANCE;
    }
    
}

 

출처

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8#curriculum

반응형