코딜기

[Design Pattern] 싱글톤 패턴 (Singleton Pattern) 본문

Etc/Design Pattern

[Design Pattern] 싱글톤 패턴 (Singleton Pattern)

코딜기 2024. 8. 29. 01:17
반응형

싱글톤 패턴 (Singleton Pattern)이란?

  • 단 하나의 인스턴스만 생성하도록 보장하며, 어디서든 그 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다.
  • 무분별한 객체의 생성을 막고, 하나의 객체를 여러 번 재활용하여 메모리의 낭비를 막을 수 있는 디자인 패턴입니다.

싱글톤 패턴 구현

  1. 외부에서 이 클래스의 객체를 생성하지 못하도록 생성자를 단 1개만 선언하고, private 접근 제한을 붙입니다.
  2. 생성자를 호출할 수 있는 곳은 같은 클래스 내부 뿐이므로 스스로의 객체를 단 1개만 생성합니다.
  3. 외부에서 이 클래스의 객체를 요구할 시, 2번에서 미리 만들어 놓은 단 하나의 객체의 주소값을 공개된 메서드를 통해 리턴합니다.
public class Singleton {
    // 1
    private Singleton() {
        System.out.println("객체가 생성됨");
    }

    // 2
    // private static으로 선언을 해서 외부에서 접근하지 못하게 막음
    private static Singleton s = new Singleton();

    // 3
    // private static으로 선언을 해서 외부에서 접근하지 못하게 막음
    // 사용할거면 새로 만들지 말고, 미리 만들어 놓은 객체를 사용해라.
    public static Singleton getInstance() {
        return s;
    }

    // ============================================================
    // 싱글톤 객체에서 사용할 메서드
    public void method1() {
        System.out.println("여러 군데에서");
    }

    public void method2() {
        System.out.println("쓰이는 중요한 메서드");
    }
}
  • 객체의 주소값을 반환하는 'getInstance()' 메서드를 'static'으로 선언하기 위해, 싱글톤 인스턴스를 저장하는 필드 역시 'static'으로 지정하였습니다.
    • 이는 클래스 수준에서 유일한 객체를 유지하기 위해서 입니다.
  • 'static' 필드로 선언된 변수는 클래스 자체를 통해 접근할 수 있으므로, 외부에서 이 변수에 직접 접근하여 객체를 변경하거나 새로 생성하는 것을 방지하기 위해 'private' 접근 제한자를 사용하여 접근을 막고 있습니다.
  • 'getInstance()' 메서드가 'static'으로 선언된 이유는, 객체를 생성하지 않더라도 클래스 차원에서 유일한 인스턴스를 반환하기 위함입니다.
    • 싱글톤 패턴의 핵심은 하나의 객체만 생성되고 이를 전역적으로 접근할 수 있도록 하는 것이기 때문입니다.
  • 싱글톤 패턴을 구현했으니 main 메서드에서 호출을 해보겠습니다.
public class Main {
    public static void main(String[] args) {

        Singleton s = Singleton.getInstance();

        s.method1();
        s.method2();
    }
}
  • 이렇게 되면 외부에서는 객체를 생성할 수 없고, 오로지 getInstance() 메서드를 통해서만 객체의 주소값을 받을 수 있습니다.
반응형
Comments