^(코딩캣)^ = @"코딩"하는 고양이;

[번역글] Thread-safe한 싱글톤(singleton) 패턴과 그 사용법(1)

Language/Objective-C & Swift
2021. 9. 22. 20:49

이 글은 Sachithra Siriwardhane 님의 글 Thread-safe singletons and their usage in Swift를 바탕으로 작성되었습니다.

Thread-safe한 싱글톤(singleton)과 그 사용법

개발자라면 다들 ‘싱글톤 패턴(singleton pattern)’에 대해 알고 있을 것이고 사용해 보셨을 것이며, iOS 어플리케이션에서 구현이 가능하실 것입니다. 이 글은 입문자 또는 싱글톤 디자인 패턴(design pattern)을 적절하게 사용하기 위한 배경 지식 향상을 원하는 분들에게 도움이 되어 드리고자 작성되었습니다. 이 글에서는 다음과 같은 주제들을 다뤄볼 것입니다.

 

싱글톤 패턴의 사용: 해야 할 것과 하지 말아야 할 것

싱글톤 패턴의 주된 목적은 주어진 타입의 인스턴스를 단 하나만 생성하여 여럿이 돌려 쓰는 경우를 확실하게 하기 위함입니다. 해당 어플리케이션 전반에서 접근되고 관리될 필요가 있는 싱글톤 자원이 있을 때 싱글톤 패턴은 유용하게 사용될 것입니다. 싱글톤 패턴은 UIApplication, FileManager, UserDefaults, URLSessionUIAccelerometer 등 Apple의 플랫폼에서 흔히 쓰입니다. 예를 들어 어떤 앱에 대한 UIApplication 클래스 인스턴스는 반드시 존재해야 하지만, 그것이 또한 여러 개가 존재해서는 안 됩니다. 다음은 Apple의 플랫폼에서 싱글톤으로 구현되는 몇 가지 예입니다.

UIApplication.shared, UserDefaults.standard, FileManager.default, URLSession.sharedOperationQueue.main 등...

 

싱글톤 패턴의 잘못된 사용

다른 디자인 패턴에 비해 싱글톤 패턴은 상대적으로 구현이 쉽기는 하나 실무에서 잘못 사용될 가능성도 있습니다. 뷰 컨트롤러(View Controller) 사이에서 데이터를 교환하거나, 전역 다목적 컨테이너로서 싱글톤 패턴을 사용하는 경우가 개발자들 사이에서 흔히 있는 일인데, 이는 싱글톤 디자인 패턴 남용의 대표적 사례이며 single responsibility principle(SOLID principle)에 반하는 코딩 스타일입니다(SOLID principle이란 어떤 프로그램에 있는 모든 클래스들은 하나의 기능만을 담당해야 한다는 원칙입니다).

게다가 싱글톤 패턴이 일단 한 번 구현되었다면, 싱글톤에 의돈하는 객체들의 추적을 어렵게 만들어서 결과적으로 상호 의존성(coupling)을 높이는 결과가 됩니다. 더 나아가서는 이 싱글톤을 수정하기 위해 상당한 비용이 소요될 것입니다.

동시성 문제를 피하고자 어떤 대상을 보호하기 위해 thread-safe한 싱글톤으로 작성할 경우, 다중 스레드로 병렬처리가 될 때 해당 객체를 접근하는 부분에서 병목현상이 발생할 수도 있음을 염두에 두시기 바랍니다. 그러므로 꼭 필요할 때 성능을 고려해가면서 싱글톤 패턴을 사용하는 것이 중요합니다.

 

카테고리 “Language/Objective-C & Swift”
more...