패스잇
CS 기초 · 심화

Singleton 패턴은 전역적으로 유일한 인스턴스를 보장하는 데 유용하지만, 테스트 용이성 저해, 다중 스레드 환경에서의 문제, 그리고 과도한 사용 시 의존성 주입을 어렵게 만드는 등 여러 단점이 지적됩니다. 이러한 Singleton 패턴의 문제점을 극복하고, 테스트 용이성과 유연성을 높이면서도 전역적인 유일성을 보장해야 하는 상황에서 Dependency Injection (DI) 또는 Monostate 패턴과 같은 대안을 어떻게 적용할 수 있는지 구체적인 코드 설계 관점에서 설명해주세요.

힌트 · Singleton은 전역 상태를 만들고 테스트 격리를 어렵게 합니다. DI는 의존성을 외부에서 주입하여 테스트 용이성을 높이며, Monostate는 상태를 공유하되 인스턴스는 여러 개 생성하여 유연성을 제공합니다.

Dependency Injection인터페이스테스트 용이성유닛 테스트Monostate 패턴

모범답안

Singleton 패턴의 문제점을 극복하고 전역적인 유일성을 보장하면서도 테스트 용이성을 확보하기 위해 DI 컨테이너와 인터페이스를 활용할 수 있습니다.

예를 들어, 설정 관리자 클래스를 싱글톤으로 구현하는 대신, 설정 관리자 인터페이스를 정의하고 실제 구현체를 DI 컨테이너에 등록합니다. 필요한 곳에서는 인터페이스를 통해 설정 관리자를 주입받아 사용합니다. 이렇게 하면 실제 구현체를 Mock 객체로 쉽게 대체하여 유닛 테스트를 수행할 수 있습니다.

Monostate 패턴은 상태를 공유하는 여러 인스턴스를 생성하여 싱글톤의 전역 상태 문제를 완화합니다. 모든 인스턴스가 동일한 내부 상태를 공유하므로, 싱글톤과 유사한 효과를 내면서도 각 인스턴스를 독립적으로 테스트할 수 있습니다. 하지만 Monostate 패턴은 상태 공유에 대한 명확한 인지가 필요하며, 예상치 못한 부작용을 초래할 수 있으므로 주의해서 사용해야 합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 디자인 패턴 면접 질문

← 디자인 패턴 면접 질문 전체 보기