YTCW

java singleton 본문

java

java singleton

YTCW 2024. 9. 10. 16:31

싱글톤 패턴

소프트웨어 설계 패턴 중하나이고

클래스의 인스턴스가 하나만 생성되도록 보장해준다

해당 클래스의 인스턴스에 전역적인 접근을 제공하지만 일관된 상태를 유지해줌

  1. static 필드:
    • private static Singleton instance;는 Singleton 클래스의 인스턴스를 보관하는 정적 필드입니다. static으로 선언되었기 때문에 클래스 로딩 시점에 하나의 인스턴스만 존재하게 됩니다.
  2. private 생성자:
    • private Singleton()는 외부에서 클래스의 인스턴스를 직접 생성하지 못하도록 막습니다. 이를 통해 다른 곳에서 new Singleton()을 호출하지 못하게 합니다.
  3. static 메서드 getInstance():
    • public static Singleton getInstance() 메서드는 싱글턴 인스턴스를 반환하는 유일한 방법입니다.
    • 인스턴스가 null일 때만 새로운 인스턴스를 생성하고, 그렇지 않으면 기존 인스턴스를 반환합니다.
  4. main 메서드에서의 테스트:
    • Singleton.getInstance()를 두 번 호출하여 두 객체가 같은지를 확인하는 테스트를 추가했습니다. 출력 결과는 true로, 두 객체는 동일한 인스턴스임을 보여줍니다.

싱글턴 패턴의 장단점:

  • 장점:
    • 자원의 중복 생성을 방지: 싱글턴 패턴을 사용하면 자원을 효율적으로 관리할 수 있으며, 메모리 사용을 최적화할 수 있습니다.
    • 글로벌 인스턴스: 전역에서 인스턴스에 접근할 수 있으므로 특정 클래스의 상태를 어디서나 쉽게 공유할 수 있습니다.
  • 단점:
    • 테스트가 어려움: 싱글턴 패턴은 전역 상태를 유지하기 때문에 유닛 테스트 시 서로 다른 상태를 가지는 여러 객체를 생성하는 것이 어렵습니다.
    • 멀티스레드 환경에서의 문제: 멀티스레드 환경에서는 인스턴스가 중복 생성될 가능성이 있기 때문에 synchronized 키워드를 사용하여 동기화를 처리해야 할 때도 있습니다.

 

public class Singleton {

    // static 필드로 Singleton 인스턴스를 선언
    private static Singleton instance;

    // private 생성자: 외부에서 직접 인스턴스 생성 불가
    private Singleton() {
    }

    // 전역 접근을 제공하는 static 메서드
    public static Singleton getInstance() {
        if (instance == null) { // 인스턴스가 없을 때만 생성
            instance = new Singleton();
        }
        return instance;
    }

    public static void main(String[] args) {
        // Singleton 패턴으로 객체 생성
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();

        // 두 인스턴스가 동일한지 확인
        System.out.println(singleton1 == singleton2);  // true 출력 (같은 인스턴스)
    }
}

'java' 카테고리의 다른 글

java Lambda  (1) 2024.09.13
java 내부 클래스  (0) 2024.09.13
java lombok  (0) 2024.09.10
java MVC 패턴  (2) 2024.09.10
java Map  (0) 2024.09.10