CS 기초 · 중급
실무에서 Singleton 패턴을 사용할 때 발생할 수 있는 문제점(예: 테스트 용이성, 멀티스레딩 환경)과 이를 해결하기 위한 방법에 대해 설명해 주세요.
힌트 · 전역 상태 관리, 의존성 주입(DI), Double-Checked Locking 또는 Enum을 통한 구현을 고려해야 합니다.
전역_상태테스트_격리멀티스레딩동기화DI(의존성_주입)
모범답안
Singleton 패턴은 전역적으로 유일한 인스턴스를 제공하여 편리하지만, 몇 가지 문제점을 야기할 수 있습니다.
첫째, 전역 상태를 가지므로 테스트 격리가 어렵습니다. 각 테스트가 독립적으로 실행되어야 하는데, Singleton 인스턴스의 상태가 공유되면 예상치 못한 테스트 실패가 발생할 수 있습니다. 이를 해결하기 위해 인터페이스를 통해 Singleton 인스턴스에 접근하고, 테스트 시에는 Mock 객체를 주입하여 의존성을 분리할 수 있습니다.
둘째, 멀티스레딩 환경에서 동기화 문제가 발생할 수 있습니다. 여러 스레드가 동시에 Singleton 인스턴스를 생성하려고 하면, 인스턴스가 여러 개 생성될 위험이 있습니다. 이를 해결하기 위해 Double-Checked Locking이나 Enum을 사용하여 스레드 안전하게 Singleton을 구현할 수 있습니다. 예를 들어, private static volatile Singleton instance; 와 같이 volatile 키워드를 사용하여 instance 변수의 가시성을 확보하고, synchronized 블록을 통해 동기화를 제어할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 디자인 패턴 면접 질문
- 빌더(Builder) 패턴은 복잡한 객체를 생성할 때 어떤 이점을 제공하며, 일반적인 생성자(Constructor) 방식과 비교했을 때의 차이점은 무엇인가요?
- 스트래티지(Strategy) 패턴은 다양한 알고리즘을 유연하게 교체해야 할 때 어떻게 활용될 수 있는지 설명해주세요.
- 옵저버(Observer) 패턴은 객체 간의 일대다 의존성을 어떻게 관리하며, 주로 어떤 시스템에서 효과적으로 사용될 수 있나요?
- Factory Method 패턴과 Abstract Factory 패턴은 모두 객체 생성을 추상화하지만, 목적과 적용 방식에 차이가 있습니다. 두 패턴의 주요 차이점을 설명하고, 각각 어떤 상황에 더 적합한지 구체적인 예시를 들어 비교해 주세요.
- 시스템의 특정 동작 방식을 런타임에 유연하게 변경해야 하는 요구사항이 있을 때, Strategy 패턴을 어떻게 적용할 수 있는지 설명하고, 이 패턴이 가져다주는 장점과 단점을 함께 설명해 주세요.
- 비동기적으로 발생하는 이벤트에 대해 여러 컴포넌트가 독립적으로 반응해야 하는 상황에서 Observer 패턴을 적용할 수 있습니다. 이 패턴의 동작 원리를 설명하고, Push 모델과 Pull 모델의 차이점 및 각각의 장단점을 비교해 주세요.