본문

Singleton Pattern

반응형

클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴

 

 

싱글턴 패턴이란 인스턴스를 하나 만들어 사용하기 위한 패턴이다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있다. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다.

 

빈번하게 사용되는 임의의 클래스를 전역변수처럼 모든 곳에서 사용할 수 있도록 만들어 불필요한 작업을 줄여 유지보수를 원활하게 만들고 성능 효율성을 향상시키기 위해 사용한다.

 

 

💡 Singleton.java

외부에서 Singleton 클래스의 생성자 호출을 금지하기 위해 private으로 선언
new Singleton() 이라는 식이 클래스 외부에 있다고 하더라도 컴파일 시 에러발생
Singleton 패턴은 프로그래머가 실수해도 인스턴스가 1개만 생성되도록 하는 패턴이다.
이것을 보증하기 위해서 생성자를 private로 해둘 필요가 있음.

public class Singleton {
    private static Singleton singleton = new Singleton();

    private Singleton() {
        System.out.println("인스턴스 생성");
    }
    
    /*
    Singleton의 역할
    유일한 인스턴스를 얻기 위한 static 메서드를 갖고 있다.
    이 메서드는 언제나 동일한 인스턴스를 반환한다.
    
    프로그램의 실행 개시 후 최초로 getInstance 메소드를 호출했을 때 Singleton 클래스는 초기화된다.
    그리고 이때 static 필드의 초기화가 이루어지고 유일한 인스턴스가 만들어진다.
    */
    public static Singleton getInstance() {
        return singleton;
    }
}

 

 

 

💡 Main.java

public class Main {
    public static void main(String[] args) {
        System.out.println("Start");

        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();

        if (obj1 == obj2) {
            System.out.println("obj1과 obj2는 같은 인스턴스");
        } else {
            System.out.println("obj1과 obj2는 다른 인스턴스");
        }
        
        System.out.println("End");
    }
}

 

 

 

💡 결과

1
2
3
4
Start
인스턴스 생성
obj1과 obj2는 같은 인스턴스
End
cs

 

반응형

공유

댓글