싱글톤 패턴(Singleton Pattern)

김헌규·2024년 6월 10일
0

싱글톤 패턴은 디자인 패턴 중 하나로, 애플리케이션 내에서 특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장하는 패턴이다. 이러한 패턴을 사용하는 이유는 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 프로그램이 예상치 못한 결과를 낳을 수 있기 때문이다. 따라서 객체를 필요할 때마다 생성하는 것이 아닌 단 한 번만 생성하여 전역에서 이를 공유하고 사용할 수 있게 하기 위해 싱글톤 패턴을 사용한다.


🧁 장점

  • 유일한 인스턴스 : 싱글톤 패턴이 적용된 클래스의 인스턴스는 애플리케이션 전역에서 단 하나만 존재하도록 보장한다. 이는 객체의 일관된 상태를 유지하고 전역에서 접근 가능하도록 한다.

  • 메모리 절약 : 인스턴스가 단 하나뿐이므로 메모리를 절약할 수 있다. 생성자를 여러 번 호출하더라도 새로운 인스턴스를 생성하지 않아 메모리 점유 및 해제에 대한 오버헤드를 줄인다.

  • 지연 초기화 : 인스턴스가 실제로 사용되는 시점에 생성하여 초기 비용을 줄일 수 있다.

🥞 단점

  • 결합도 증가 : 싱글톤 패턴은 전역에서 접근을 허용하기 때문에 해당 인스턴스에 의존하는 경우 결합도가 증가할 수 있다.

  • 테스트 복잡성 : 싱글톤 패턴은 단 하나의 인스턴스만을 생성하고 자원을 공유하기 때문에 싱글톤 클래스를 의존하는 클래스는 결합도 증가로 인해 테스트가 어려울 수 있다.

  • 상태 관리의 어려움 : 만약, 싱글톤 클래스가 상태를 가지고 있는 경우 전역에서 사용되어 변경될 수 있다. 이로 인해 예상치 못한 동작이 발생할 수 있다.

  • 전역에서 접근 가능 : 애플리케이션 내 어디서든 접근이 가능한 경우, 무분별한 사용을 막기 힘들다. 이로 인핸 변경에 대한 복잡성이 증가할 수 있다.

public class Singleton {
    // 정적 멤버 변수로 유일한 인스턴스를 가지도록 함
    private static Singleton instance;

    // 생성자를 private으로 선언하여 외부에서 인스턴스를 생성하지 못하도록 함
    private Singleton() {
        // 생성자 내용
    }

    // 외부에서 유일한 인스턴스에 접근할 수 있는 정적 메서드 제공
    public static Singleton getInstance() {
        // 인스턴스가 생성되지 않았을 경우에만 생성하도록 함
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

싱글톤 패턴은 자주 사용되는 디자인 패턴 중 하나이지만, 과용될 경우 전역 상태로 인한 문제가 발생할 수 있으므로 주의해야 한다. 또한 멀티스레드 환경에서 스레드 안전한 방식으로 구현되어야 하며, 이를 위해 다양한 방법으로 싱글톤 인스턴스의 생성 및 접근을 동기화할 수 있다.


참고
https://ittrue.tistory.com/563

profile
Happiness is not a destination, it's a way of life.

0개의 댓글