Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Protocol
- 리펙토링
- Clean Code
- clean architecture
- ribs
- combine
- 애니메이션
- 클린 코드
- RxCocoa
- UITextView
- swiftUI
- SWIFT
- ios
- tableView
- Observable
- uiscrollview
- collectionview
- uitableview
- rxswift
- UICollectionView
- HIG
- Refactoring
- map
- Human interface guide
- 리팩토링
- MVVM
- 리펙터링
- 스위프트
- Xcode
- swift documentation
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] 스위프트에서의 singleton 싱글톤 동작 이해하기 (lazy, thread safe) 본문
iOS 응용 (swift)
[iOS - Swift] 스위프트에서의 singleton 싱글톤 동작 이해하기 (lazy, thread safe)
jake-kim 2022. 12. 15. 02:02싱글톤 패턴
- 인스턴스는 오직 한개를 사용하고, 라이프사이클 동안 절대 해제되지 않는 하나의 인스턴스 유지
- swift에서는 static와 함께 전역변수로 선언하면 lazy하게 동작하는 장점이 존재
- swift에서는 멀티 스레드에서 singleton을 사용해도 thread safe한 장점이 존재 (아래에서 계속)
public class MyClass {
static let shared = MyClass()
private init() {}
public func printSome() {
print("some")
}
}
MyClass.shared.printSome()
swift에서의 싱글톤 동작
- singleton 패턴은 SRP(Single Responsibility Principle) 원칙을 위반
- SRP원칙이란 하나의 컴포넌트 (MyClass)는 사용하는 쪽에서 여러 actor가 접근하여 사용할 수 있게되어, 여러 actor를 대상으로 기능을 제공하는 구조로 변할 가능성이 높음
- SRP 원칙을 위반하지만 사용하는 이유는, 코드의 유연함과 가독성이 높기 때문
- singleton 패턴은 메모리에 항상 올라와 있으며, 해제되지 않는점에 대해서 메모리 효율상 단점이 존재
- 일반적인 singleton은 Thread safe하지 않지만 swift에서는 thread safe
- swift에서 전역변수를 사용하여 인스턴스를 사용하는 경우, GCD의 dispatch_once라는 것이 자동으로 적용되어 인스턴스가 생성되어 자동으로 thread safe한 방법으로 접근
- dispatch_once를 통해 atomic하게 초기화가 가능
- 스위프트에서는 static 키워드로 설정된 타입 프로퍼티는 lazy property처럼 처음 접근할 때 초기화로 동작
* swift가 아닌 경우, thread safe하지 않은 이유는 1번 스레드와 2번 스레드가 동시에 instance를 호출할 때 인스턴스가 동시에 만들어지는 것 (= thread safe하지 않음)
* 참고
https://developer.apple.com/swift/blog/?id=7
'iOS 응용 (swift)' 카테고리의 다른 글
Comments