Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCross에서 싱글 톤을 사용하는 단점은 무엇입니까?


MVVMCross에서 싱글 톤을 사용하는 단점은 무엇입니까?


싱글 톤은 단일 클래스 인스턴스를 보장하는 데 유용하지만 MVVMCross를 사용하는 것을 포함하여 응용 프로그램의 유지 관리 및 확장성에 영향을 줄 수있는 몇 가지 단점이 있습니다. 주요 문제는 다음과 같습니다.

1. 테스트 가능성 문제 **

싱글 톤은 상태를 유지하고 자신의 수명주기를 관리하기 때문에 테스트하기가 어렵습니다. 이로 인해 실수로 네트워크 나 다른 외부 시스템과 상호 작용하지 않는 단위 테스트를 작성하는 것이 어려워집니다. 뷰 모델 및 기타 구성 요소의 신뢰성을 보장하는 데 테스트가 중요한 MVMCross에서 싱글 톤은 개별 구성 요소를 효과적으로 분리하고 테스트하는 능력을 방해 할 수 있습니다 [1] [4].

2. 데이터 불일치 및 멀티 스레딩 문제 **

다중 스레드 환경에서 싱글 톤은 제대로 동기화되지 않으면 데이터 불일치로 이어질 수 있습니다. 이로 인해 비 결정적 행동이 발생하여 문제를 디버그하기가 어려울 수 있습니다. 싱글 톤 스레드-안전을 만들 수는 있지만 복잡성을 추가하고 항상 올바르게 수행되는 것은 아닙니다 [2] [4].

3. 숨겨진 종속성 및 커플 링 **

싱글 톤은 자원에 대한 글로벌 액세스 지점을 제공함으로써 숨겨진 의존성을 장려합니다. 이로 인해 싱글 톤의 구체적인 구현에 의존하기 때문에 클래스간에 밀접한 결합으로 이어질 수 있습니다. 느슨한 커플 링이 깨끗한 아키텍처를 유지하는 데 유리한 MVVMCross에서, 싱글 톤은 전체 시스템에 영향을 미치지 않고 구성 요소를 변경하거나 교체하기가 어렵게 함으로써이 원칙을 약화시킬 수 있습니다 [2] [3].

4. 탄탄한 원칙 위반 **

싱글 톤은 몇 가지 탄탄한 원칙을 위반합니다.
-SRP (Single Responsibility Principle) : 싱글 톤은 종종 주요 책임 외에도 자신의 수명주기를 관리하여 불필요한 복잡성을 유발할 수 있습니다.
-의존성 반전 원리 (DIP) : 높은 수준의 모듈은 낮은 수준의 세부 사항에 의존해서는 안되지만 싱글 톤을 사용하면 싱글 톤의 구체적인 구현에 의존하기 때문에 종종 그렇습니다 [2] [3].

5. 확장 성 및 유연성 제한 **

싱글 톤은 변화하는 요구 사항에 적응하기 어렵게하여 확장 성을 제한 할 수 있습니다. 응용 프로그램이 여러 자원의 자원 인스턴스를 처리하거나 리소스 관리 방식을 변경 해야하는 경우 싱글 톤은 병목 현상이 될 수 있습니다. 다른 플랫폼 및 구성을 처리하는 데 유연성이 중요한 MVMCross에서 싱글 톤은 이러한 기능을 제한 할 수 있습니다 [7].

6. 국가 관리 과제 **

싱글 톤은 응용 프로그램의 수명 동안 상태를 가지고있어 상태를 재설정하거나 효과적으로 관리하기가 어려울 수 있습니다. 이것은 국가를 자주 새로 고치거나 업데이트 해야하는 응용 분야에서 특히 문제가된다 [4].

싱글 톤 대안

이러한 단점을 피하기 위해 개발자는 종종 의존성 주입을보다 유연하고 유지 관리 가능한 대안으로 전환합니다. 의존성 주입을 통해 글로벌 인스턴스에 의존하기보다는 생성자 또는 기타 수단을 통해 종속성을 제공하여 부품을 느슨하게 결합하고 쉽게 테스트 할 수 있습니다 [1] [7]. MVVMCross에서 의존성 주입을 사용하면 테스트하고 유지하기가 더 쉬운 깨끗하고 확장 가능한 아키텍처를 유지하는 데 도움이 될 수 있습니다.
인용 :
[1] https://www.reddit.com/r/iosprogramming/comments/9zxqj1/why_i_cant_singleton_why_it_is_bad_design/
[2] https://www.youtube.com/watch?v=x6gbdwfnin4
[3] https://www.davidtanzer.net/david's%20blog/2016/03/14/6-20-20-2.
[4] https://matteomanferdini.com/swift-singleton/
[5] https://forums.kodeco.com/t/why-i-cant-use-singleton-why-is-bad-design-pattern/56168
[6] https://www.reddit.com/r/androiddev/comments/8v2wfa/are_singletons_a_bad_practice/
[7] https://www.linkedin.com/advice/0/what-benefits-drawbacks-using-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what