- ν΄λμ€λ ꡬ쑰체μ λ€λ₯΄κ² λ©€λ²μμ΄μ¦ μ΄λμ λΌμ΄μ κ° μμ
- νμλ‘ κ΅¬νν΄μΌ ν¨
μ§μ μμ±μ(Designated Initializer)
class Anmimal {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
- λͺ¨λ νλ‘νΌν°λ₯Ό μλ²½νκ² μ΄κΈ°νν¨
- μ΅μ λ νλ‘νΌν°μ΄κ±°λ κΈ°λ³Έκ°μ κ°μ§ νλ‘νΌν°λ μμΈ
- λͺ¨λ ν΄λμ€λ μ μ΄λ 1κ° μ΄μμ μ§μ μμ±μλ₯Ό κ°μ§
- λ°λμ μμ ν΄λμ€μ μ§μ μμ±μλ λΆλͺ¨ ν΄λμ€μ μ§μ μμ±μλ₯Ό νΈμΆν΄μΌ ν¨
νΈμ μμ±μ (Convenience Initializers)
class Anmimal {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
- μ§μ μμ±μλ₯Ό νΈλ¦¬νκ² λ§λ€μ΄μ£Όλ μ¦ λμμ£Όλ μμ±μ
- λ°λμ κ°μ ν΄λμ€μ μλ μ§μ μμ±μ or νΈμ μμ±μλ₯Ό νΈμΆν΄μΌ ν¨
- νΈμ μμ±μλ κ°μ ν΄λμ€ λ΄μ μμ±μλ§ νΈμΆνλ€.
- μ§μ μμ±μλ λΆλͺ¨ ν΄λμ€μ μ§μ μμ±μλ₯Ό νΈμΆνλ€.
2λ¨κ³ μ΄κΈ°ν (Two-Phase Initialization)
- ν΄λμ€μ μ΄κΈ°νλ 2λ¨κ³λ₯Ό κ±°μΉλ€.
1λ¨κ³
- μ΄κΈ°ν → λͺ¨λ νλ‘νΌν°κ° μ΄κΈ°κ°μ κ°μ ΈμΌ νλ€.
- νμ¬ ν΄λμ€μ νλ‘νΌν°λ₯Ό λͺ¨λ μ΄κΈ°ννλ€.
- κ·Έλ¦¬κ³ super.initμΌλ‘ νκ³ μ¬λΌκ°μ λΆλͺ¨ ν΄λμ€μ νλ‘νΌν°λ λͺ¨λ μ΄κΈ°ννλ€. (μ΅μμ 체μΈκΉμ§ μ¬λΌκ°)
- κ°μ₯ μμ μλ ν΄λμ€μ νλ‘νΌν°κ° λͺ¨λ μ΄κΈ°ν λλ€κ³ νλ¨λλ©΄ 1λ¨κ³ μ’ λ£
- 1λ¨κ³κ° μ’ λ£λλ©΄ μΈμ€ν΄μ€μ λ©λͺ¨λ¦¬κ° μμ ν μ΄κΈ°ν λ¨ (μ΄μ νλ‘νΌν° μ½κ³ μ°κΈ° κ°λ₯)
2λ¨κ³
- μ΄κΈ°ν μ΄ν μμ μ§ν
- λΆλͺ¨ ν΄λμ€μμ μ΄κΈ°ννλ κ°μ λ³κ²½νλ μμ
- μλ¬κ° λ¨λ μ΄μ
- 1λ¨κ³ μ΄κΈ°νκ° λλμ§ μμ μΈμ€ν΄μ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ°μ§ μμκΈ° λλ¬Έμ΄λ€.
μ΄κΈ°ν ꡬ문 μμκ³Ό μ¬μ μ (Initializer Inheritance and Overriding)
- κΈ°λ³Έμ μΌλ‘ λΆλͺ¨ ν΄λμ€μ μ΄κΈ°νλ μμλμ§ μμ
μμλλ κ²½μ°
- μμ ν΄λμ€μ νλ‘νΌν°κ° λͺ¨λ μ΄λ―Έ μ΄κΈ°ν λμ΄ μμ΄ μ§μ μ΄κΈ°νκ° μλ κ²½μ°
class Human {
var name: String
init(name: String) {
self.name = name
}
}
class Sodeul: Human {
// 1. μλΈ ν΄λμ€μ λͺ¨λ μμ±μ΄ κΈ°λ³Έ κ°μΌλ‘ μ΄κΈ°ν
var nickName: String = "Sodeul"
var age: Int?
// 2. Designated Initializersλ₯Ό μ§μ ꡬν X
}
2. μμ ν΄λμ€κ° λͺ¨λ μ§μ μμ±μλ₯Ό μ€λ²λΌμ΄λ© ν κ²½μ° (νΈμ μμ±μ μμ)
class Human {
var name: String
init(name: String) {
self.name = name
}
convenience init(unknown: String) {
self.init(name: unknown)
}
}
class Sodeul: Human {
var nickName: String
override init(name: String) {
nickName = name
super.init(name: name)
}
}
μΆμ²
https://babbab2.tistory.com/170
https://babbab2.tistory.com/169?category=828998
μλ€μ΄λ λλΆμ μ½κ² μ΄ν΄νλ€..! κ°μ¬ν©λλ€
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[swift] μμ, μ€λ²λΌμ΄λ© (1) | 2024.01.06 |
---|---|
[swift] λ©μλ (0) | 2023.12.29 |
[swift] κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (Object Oriented Programming) (0) | 2023.12.29 |
Stringμ μ subscriptλ‘ μ κ·Όμ΄ μλλμ§ μ€λͺ νμμ€. (0) | 2023.03.20 |