티스토리 뷰
안녕하세요 Hani입니다.
Swift에서는 모든 저장 프로퍼티가 초기 값을 받을 수 있도록 도와주는 두 종류의 Initializer를 제공합니다.
Init과 Convenience Init, 두 Initializer의 차이에 대하여 알아보겠습니다.
Init
Init(=Designated Init)은 Swift의 기본 생성자입니다.
생성자를 통해 Class, Struct, Enum의 인스턴스에 담길 저장 프로퍼티의 초기 값을 설정할 수 있습니다.
하지만 Init은 타입 안에 존재하는 모든 저장 프로퍼티에 대해 초기화를 해야 한다는 조건이 있습니다.
단, 프로퍼티의 기본 값을 정해주는 경우나 저장 프로퍼티가 옵셔널이라면 Init에 포함되지 않아도 괜찮습니다.
struct Color {
let red, green, blue: Double
init(red: Double, green: Double, blue: Double) {
self.red = red
self.green = green
self.blue = blue
//red, green, blue 하나라도 생략하면 오류 발생
}
}
Convenience Init
Convenience Init에 대하여 궁금해진 이유는 Hex값 또는 RGB값을 통해 Color를 얻을 수 있도록 만들어주는 UIColor의 Extension에서 Designated Init을 사용하고 있지 않았기 때문입니다.
Convenience Init는 Designated Init의 인자 중 일부를 받아서 Convenience Init안에 있는 다른 생성자에게 위임할 수 있습니다.
Designated Init와 달리 모든 저장 프로퍼티에 대한 인자를 받지 않기 때문에 Designated Init보다 작성 조건이 유연합니다.
Convenience Init의 내부에서 다른 생성자를 호출하고 있으며, 최종적으로 UIColor Init(red, green, blue, alpha)를 불러오게 됩니다.
그럼 처음부터 Designated Init으로 선언하지 않고 굳이 Convenience Init으로 선언할까요?
Extension은 저장 프로퍼티를 포함하지 말아야 하며, Designated Init은 Extension안에서 선언될 수 없기 때문입니다.
따라서 RGB값과 Alpha값을 인자로 하는 UIColor의 Designated Init를 불러오는 Convenience Init을 만든 것입니다.
그래서 UIColor의 Extension에서 Convenience Init가 쓰였던 것입니다..! 궁금증이 해결됐네요.
References
docs.swift.org/swift-book/LanguageGuide/Initialization.html
'Swift' 카테고리의 다른 글
[Swift] 일급 객체 First class Citizen (0) | 2021.05.15 |
---|---|
[스위프트] 클로저 정리 (0) | 2021.05.14 |
[Swift] Deque, OrderedSet, OrderedDictionary (0) | 2021.04.07 |
[스위프트] guard let / if let (0) | 2021.03.21 |
[Swift] Color Literal / Custom Color (0) | 2021.03.15 |
- Total
- Today
- Yesterday
- 최대 매칭
- 최단경로 알고리즘
- CompositionalLayout
- 벨만포드 알고리즘
- 코딩대회
- 강한 순환 참조
- HIG
- mach-o
- WWDC16
- test coverage
- WWDC17
- State Restoration
- 네트워크 플로우
- 에드몬드 카프 알고리즘
- 최단경로문제
- 포드 풀커슨 알고리즘
- WWDC19
- 부스트캠프 6기
- rxswift
- CPU와 Memory
- 벨만포드 시간복잡도
- WWDC21
- 다익스트라 시간복잡도
- IOS
- 컴퓨터 추상화
- observeOn
- 최단경로 문제
- Testable
- MeTal
- 네트워크 유량
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |