Java 싱글톤(Singleton)

이동명·2023년 6월 1일
0
post-thumbnail

싱글톤(Singleton) 패턴

어떤 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다. 이 패턴은 인스턴스를 전역적으로 접근 가능하게 하고, 여러 곳에서 동시에 인스턴스를 생성하지 않도록 하는 데 사용됩니다.

싱글톤 패턴을 구현하는 가장 일반적인 방법은 다음과 같습니다.

  • 생성자를 private로 선언하여 외부에서 직접 인스턴스를 생성하는 것을 막습니다.

  • 클래스 내부에서 유일한 인스턴스를 생성합니다.

  • 외부에서 해당 인스턴스에 접근할 수 있는 public static 메서드를 제공합니다.

public class Singleton {
    private static Singleton instance;

    // private 생성자
    private Singleton() {
        // 초기화 코드
    }

    // 인스턴스 반환 메서드
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    // 기타 메서드
    public void doSomething() {
        // 동작 코드
    }
}

위의 예시에서는 instance 변수가 클래스의 유일한 인스턴스를 저장하며, getInstance() 메서드를 통해 외부에서 인스턴스에 접근할 수 있습니다. 이 메서드는 인스턴스가 존재하지 않을 경우에만 인스턴스를 생성하고, 이미 인스턴스가 존재하는 경우에는 기존 인스턴스를 반환합니다.

싱글톤 패턴은 다음과 같은 장점과 단점을 가지고 있습니다.

장점

  • 인스턴스가 오직 하나만 생성되므로, 메모리 낭비를 줄일 수 있습니다.

  • 여러 곳에서 동시에 인스턴스를 생성하는 경우를 방지하여 일관된 상태를 유지할 수 있습니다.

  • 전역적으로 접근 가능하므로, 다른 객체들이 쉽게 인스턴스에 접근할 수 있습니다.

단점

  • 인스턴스가 전역적으로 공유되므로, 상태를 공유하는 다중 스레드 환경에서 동기화 처리가 필요할 수 있습니다.

  • 테스트하기 어려울 수 있으며, 의존성을 갖는 객체를 모의(mock) 처리하기 어려울 수 있습니다.

  • 코드 유지보수가 어려울 수 있으며, 인스턴스의 생성 시점과 수명을 다루기 어려울 수 있습니다.

따라서, 상황에 맞게 적절히 주의하며 활용해야 합니다.

그냥 DI 하자..

profile
Web Developer

0개의 댓글