반응형

싱글톤 패턴


싱글톤(singleton)패턴의 정의는 단순하다.
객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다.

싱글톤 패턴을 구현하는 방법은 여러가지가 있지만, 
여기서는 객체를 미리 생성해두고 가져오는 가장 단순하고 안전한 방법을 소개하겠다.

 

    public class Singleton
    {
        private static Singleton instance = new Singleton();
       
        private Singleton()
        {
            //생성자는 외부에서 호출을 하지 못하게 private으로 지정.
        }
        public static Singleton getInstance()
        {
            return instance;
        }
        public void Say()
        {
            Console.WriteLine("Hello");
        }
    }


싱글톤 패턴은 객체의 인스턴스가 오직 하나만 생성되는 디자인 패턴을 의미합니다. 객체의 인스턴스가 전역적으로 접근 가능하고 재사용되는 장점을 가지며, 주로 자원의 공유나 중복 생성을 피하기 위해 사용됩니다. 하지만 싱글톤 패턴은 구현에 따른 다양한 문제점을 가지고 있습니다.

장점:

메모리와 성능 효율: 싱글톤 패턴을 통해 객체 인스턴스가 한 번만 생성되므로 메모리 사용을 줄이고, 생성 및 소멸 과정에서 오버헤드를 줄일 수 있습니다.

전역적인 접근 가능성: 다른 클래스에서 해당 인스턴스에 쉽게 접근할 수 있어서 데이터나 메서드를 공유하기 용이합니다.

단점:

복잡한 구현: 싱글톤 패턴은 멀티스레드 환경에서 동시성 문제를 해결하기 위해 추가 코드가 필요한 경우가 있습니다. Lazy initialization이나 멀티스레딩에 대한 고려가 필요합니다.

테스트 어려움: 싱글톤은 전역적으로 접근 가능하므로 테스트에서 문제를 일으킬 수 있습니다. 테스트할 때마다 인스턴스 상태를 초기화해주거나 테스트 더블을 사용해야 합니다.

의존성과 유연성 문제: 클라이언트 코드는 싱글톤 클래스의 구체적인 구현에 의존하게 됩니다. 이로 인해 SOLID 원칙 중 DIP와 OCP를 위반할 가능성이 높습니다.

상속 문제: 일반적인 싱글톤 패턴은 상속이 어렵거나 복잡하게 됩니다. 싱글톤 자체를 상속받는 클래스를 만들어도 싱글톤 특성을 유지하기 어렵습니다.

내부 상태 변경 어려움: 다른 객체와 공유되는 싱글톤 인스턴스의 내부 상태를 변경하기 어려울 수 있습니다.

결론적으로, 싱글톤 패턴은 메모리와 성능 측면에서 이점을 가지지만, 복잡한 구현과 테스트 어려움, 의존성 문제 등 다양한 단점을 가지고 있어서 사용 시 신중한 고려가 필요합니다. 따라서 싱글톤 패턴을 선택할 때는 해당 상황과 요구사항을 잘 고려하고, 필요한 경우 대안적인 디자인 패턴이나 접근 방식을 고려하는 것이 좋습니다.

 

 

반응형