iOS/면접 질문
[ iOS 면접 질문 ] 싱글톤 패턴(Singleton Pattern)이란 무엇이며, 어떤 경우에 사용하나요?
Sheep1sik
2025. 5. 27. 09:21
반응형
싱글톤 패턴(Singleton Pattern)이란 무엇이며, 어떤 경우에 사용하나요?
싱글톤 패턴은 애플리케이션 전역에서 하나의 인스턴스만 생성되도록 보장 하는 디자인 패턴입니다. 주로 공통된 설정, 네트워크 관리, 데이터 저장소, 로깅 등의 공유 리소스를 관리할 때 사용됩니다. 이 패턴을 통해 인스턴스를 여러 곳에서 접근 가능하면서도 일관성을 유지할 수 있습니다.
싱글톤 패턴의 장점과 단점을 설명해주세요.
싱글톤의 장점은 하나의 인스턴스를 여러 곳에서 재사용할 수 있어 메모리 사용을 줄이고, 전역 접근이 가능해 어디서든 쉽게 사용할 수 있으며, 일관된 상태를 유지하는 데 효과적입니다.
단점은 가장 큰 문제는 테스트가 어렵다는 점입니다. 싱글톤은 전역 상태를 가지기 때문에 하나의 테스트가 다른 테스트에 영향을 줄 수 있습니다. 또한 의존성이 코드에 명시되지 않고 내부에 숨어 있기 때문에, 코드 추적이 어렵고 유지보수성이 떨어질 수 있습니다. 싱글톤이 많아지면 앱 전반에 전역 상태가 늘어나면서 예측하지 못한 사이드 이펙트가 발생할 수 있습니다.
이러한 이유로 싱글톤은 신중하게 사용되어야 하며, 남용은 지양해야 합니다.
싱글톤 패턴을 남용했을 때 발생할 수 있는 문제는 무엇인가요? (전역 상태 문제, 테스트 어려움, 의존성 숨김 등)
싱글톤을 과도하게 사용하면 앱 전체에 전역 상태가 퍼지게 되어, 사이드 이펙트를 예측하기 어려워지고 디버깅도 복잡해집니다.
또한 외부에서 의존성을 주입하지 않고 내부에서 직접 참조하기 때문에 테스트가 어려워지고, 코드 상에서 어떤 객체가 어떤 싱글톤에 의존하는지 알기 어렵기 때문에 의존성이 숨겨진 상태로 유지 됩니다.
이러한 이유로 싱글톤은 꼭 필요한 경우에만 제한적으로 사용하는 것이 바람직합니다.
Swift에서 싱글톤 패턴을 구현하는 일반적인 방법은 무엇이며, 멀티스레드 환경에서의 안전성(Thread Safety)은 어떻게 보장되나요?
Swift에서는 보통 static let shared = ClassName() 형태로 싱글톤을 구현합니다. 생성자는 private으로 선언하여 외부에서 인스턴스를 새로 생성할 수 없게 제한합니다.
이 방식은 내부적으로 Swift가 dispatch_once처럼 동작하는 구조로 구현되어 있어, 멀티스레드 환경에서도 인스턴스가 단 한 번만 안전하게 초기화되고 공유되도록 보장됩니다. 따라서 별도의 동기화 처리를 하지 않아도 스레드 안전성이 유지됩니다.
Swift에서 let 키워드를 사용하여 싱글톤 인스턴스를 선언하는 것이 왜 스레드 안전성을 보장하는 데 도움이 되나요? (dispatch_once 동작 방식 연관)
Swift에서 static let 은 내부적으로 **지연 초기화(lazy initialization)**와 함께
dispatch_once와 유사한 방식으로 동작 하기 때문에, 최초 접근 시 단 한 번만 인스턴스를 생성하게 됩니다.
이 동작은 자동으로 스레드 세이프(thread-safe)하게 처리되므로, 여러 스레드에서 동시에 접근해도 싱글톤이 중복 생성되지 않고, 항상 동일한 인스턴스를 안전하게 사용할 수 있게 됩니다.
반응형