티스토리 뷰
다양한 부분에서 활용하는 패턴인 싱글턴 패턴에 대해서 알아보고 Swift에서는 어떻게 싱글턴 패턴을 구현하는지 공유하겠습니다.
싱글턴 패턴(Singleton pattern)
싱글턴으로 구현된 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이며, 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴합니다. 요약하자면, 하나의 객체가 생성되어 재활용 하는 패턴을 의미합니다.
Object-C 에서의 싱글턴
object-c 에서는 싱글턴 패턴을 구현할 때에 dispatch_once_t 을 사용합니다.
void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);
Q. dispatch_once_t 무엇인가?
A. App 라이프 사이클에서 단 한번만 실행되도록 보장해 주는 것을 의미하며 Thread Safe을 보장 받기 위해 사용합니다.
Q. Thread Safe 란 무엇인가?
A. 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이뤄져도 프로그램의 실행에 문제가 없음을 뜻합니다. 따라서 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바르게 나오게 나오는 것을 Thread Safe라고 합니다.
Swift 에서는 싱글턴
swift 3.0 부터는 dispatch_once_t을 제공하고 있지 않습니다. 그 대신 static let 속성이 제공되고있습니다. let(상수)으로 상속을 금지하고 있으며 static으로 공개되어 유일한 인스턴스에 접근 하도록 할 수 있습니다. private init() 도 추가하여 외부 접근성을 방지하도록 설정하여 싱글턴을 구현할 수 있습니다.
final class SinglethonSample {
//static let 으로 상속 방지 및 외부 접근 가능
static let sharedInstance = SinglethonSample()
// private init()을 통한 외부 생성 방지
private init() {
}
}
// 실제 사용
let instance: SinglethonSample = SinglethonSample.sharedInstance
정리
swift 3.0 기준으로 싱글턴 표현 방식이 dispatch_once_t 에서 static let으로 변경된 부분이 있었으나, static let으로 통한 접근으로 접근성이 더 편해졌습니다. 이상 싱글턴 패턴에 대한 설명이었습니다.
참고
https://ko.wikipedia.org/wiki/%EC%8B%B1%EA%B8%80%ED%84%B4_%ED%8C%A8%ED%84%B4
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_%EC%95%88%EC%A0%84
https://developer.apple.com/documentation/dispatch/1447169-dispatch_once
https://swifter.kr/2016/10/22/swift-3-0%EA%B8%B0%EB%B0%98-gcd-%EA%B8%B0%EC%B4%88/
'프로그래밍 > iOS' 카테고리의 다른 글
[SWIFT] UITextView Center Vertical (텍스트뷰 세로 가운데 정렬) (0) | 2018.02.27 |
---|---|
Popup Dialog 모듈 구현 방법 (Listener 포함) (0) | 2018.02.25 |
[SWIFT] Realm 사용법 (0) | 2018.01.19 |
[SWIFT] 화면 회전 적용하기 (0) | 2018.01.16 |
[SWIFT] UIWebView와 WebKit 그리고 ScrollView을 활용한 Pager View (0) | 2018.01.12 |
- MCC
- 고시문
- 고시문헬퍼
- missionchina
- flutter
- 코틀린
- push
- missioon
- 탁구
- 알고리즘
- 미션차이나센터
- 패턴
- view
- IT
- swift
- 디자인패턴
- RXjava
- 안드로이드
- 선교
- Android
- IOS
- DI
- Kotlin
- java
- issue
- Android Studio
- 임용고시
- 스코어헬퍼
- 점수판
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |