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
- ribs
- clean architecture
- 리펙터링
- 애니메이션
- Clean Code
- Observable
- 리펙토링
- RxCocoa
- collectionview
- UICollectionView
- uiscrollview
- 리팩토링
- tableView
- 클린 코드
- swift documentation
- map
- HIG
- MVVM
- Human interface guide
- ios
- Xcode
- UITextView
- 스위프트
- Refactoring
- swiftUI
- rxswift
- uitableview
- SWIFT
- Protocol
- combine
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 상속 관계에서의 초기화 테크닉 (#타입을 넘겨서 초기화하기) 본문
일반적인 초기화 방법
- 상속 관계에서 주입해주는 인스턴스가 super class 것이든, sub class 것이든 상관 없이 초기화하고 특정 업무를 수행할 때 인스턴스를 넘기는 형태로 구현
class BaseA {
var value: String {
"BaseA"
}
required init() {
}
}
class SubA: BaseA {
override var value: String {
"SubA"
}
required init() {
super.init()
}
}
printByPassInstance(a: BaseA()) // BaseA
printByPassInstance(a: SubA()) // SubA
func printByPassInstance(a: BaseA) {
print(a.value)
}
- 이 초기화 방법은 사용하는 쪽에서 Instance를 만들어서 주입해주는 방법
- 위에서 살펴본 printByPassInstance는 인스턴스를 주입 받는 형태이고, 이 인스턴스의 사용은 printByPassInstance 구현부에서 사용이 되는 것
- 엄밀히 따지면 인스턴스가 필요한 시점은 함수의 구현부이고 이 구현부에서만 사용하고 없어지는 인스턴스이므로 사용하는 쪽에서 굳이 인스턴스가 필요 없는 상태
타입을 넘겨서 초기화하기
- 아래처럼 타입만을 넘겨서, 불필요한 인스턴스 없이 사용할 수 있는 방법이 존재
printByPassType(type: BaseA.self) // BaseA
printByPassType(type: SubA.self) // SubA
- 함수 구현부를 보면 type을 받으면 그 type에 해당하는 인스턴스 메소드를 사용할 수 있기 때문에 함수 구현부에서 인스턴스 초기화가 가능
- 불필요한 인스턴스를 이 함수가 필요한 곳에서 만들지 않고 함수 내부 구현부에서 만들도록 하면 필요한곳에서 만들어서 쓰고, 이 인스턴스의 관심사가 아닌 클라이언트 코드에서는 초기화 코드가 없으므로 더욱 명확한 코드 유지가 가능
func printByPassType(type: BaseA.Type) {
let instance = type.init()
print(instance.value)
}
* 전체 코드: https://github.com/JK0369/ExTypeInit
'iOS 응용 (swift)' 카테고리의 다른 글
Comments