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 | 31 |
Tags
- map
- 리펙터링
- UICollectionView
- UITextView
- ios
- RxCocoa
- 리펙토링
- uitableview
- Xcode
- ribs
- MVVM
- Human interface guide
- 클린 코드
- Refactoring
- swift documentation
- swiftUI
- Clean Code
- combine
- uiscrollview
- tableView
- Protocol
- 스위프트
- HIG
- SWIFT
- clean architecture
- 애니메이션
- 리팩토링
- collectionview
- Observable
- rxswift
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] any vs some 키워드 (dynamic dispatch, static dispatch, type erase) 본문
iOS 응용 (swift)
[iOS - swift] any vs some 키워드 (dynamic dispatch, static dispatch, type erase)
jake-kim 2024. 2. 2. 00:32any와 some 키워드
- any와 some키워드는 type erase 방법
- type erase: 코드의 추상화를 위해서 구체적인 타입을 지우는 것
- 3가지 메소드의 차이점?
protocol P {}
func f1(p: P) {
}
func f2(p: any P) {
}
func f3(p: some P) {
}
- any와 some 모두 type erase 방법들이고 swift에서는 각각 쓰임새가 존재
- any는 existential type에서 사용하는 키워드
- some은 주로 return type에 사용하는데 some키워드를 사용하면 컴파일 시점에 static dispatch로 동작
- (existential type 개념은 이전 포스팅 글 참고)
ex) SwiftUI에서도 some키워드로 body의 타입을 명시하는데 이것은 어떤 뷰든지 View형태로만 값을 가져온다는 추상화와 동시에 성능상으로도 이점을 가져갈 수 있음
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
}
정리
- any는 parameter에만 사용하고 성능 최적화를 위한다면 지양할 것 (dynamic dispatch)
- some은 return 타입에 사용할 것
- (some키워드 없이 protocol 형태로 반환한다면 dynamic dispatch가 되므로 some키워드를 붙여서 static dispatch되도록 사용)
* 참고
- https://github.com/apple/swift-evolution/blob/main/proposals/0352-implicit-open-existentials.md
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] Type casting 표현식 (0) | 2024.02.06 |
---|---|
[iOS - swift] Optional Operator (옵셔널 프로퍼티 연산) (0) | 2024.02.05 |
[iOS - swift] 3. 추상화 - 프로토콜에 제네릭스 사용하는 추상화 이해하기 (1) | 2024.02.01 |
[iOS - swift] 2. 추상화 - 제네릭스로 추상화하기 (#GenericTableView) (2) | 2024.01.31 |
[iOS - swift] protocol에 사용되는 any 키워드 개념 (existential any, existential type) (2) | 2024.01.30 |
Comments