μμ
μμμ΄λ?
- μμμ μ€μ§ ν΄λμ€μμλ§ κ°λ₯νλ©° λΆλͺ¨μ λ©μλμ νλ‘νΌν°μ κ°μ νΉμ±λ€μ κ·Έλλ‘ λ¬Όλ €λ°λ κ²μ λλ€.
μμμ μ μ¬μ©ν κΉ?
- μμμ λΆλͺ¨μ νΉμ±μ κ·Έλλ‘ λ¬Όλ €λ°μ μ μκΈ° λλ¬Έμ μ€λ³΅λ μ½λ μμ±μ μ€μΌ μ μμ΅λλ€.
- ex) μΈκ°μ κ³ μ μ μ΄λ¦, μ±λ³μ΄ μμ΅λλ€. λ§μ½ A, B, CλΌλ μΈκ°μ΄ μκ³ κ°κ° μΈκ°λ€μ κ³ μ μ νΉμ±μ κ°μ§κ³ μμ§λ§ 곡ν΅μ μΌλ‘ λͺ¨λ μ΄λ¦κ³Ό μ±λ³μ κ°μ§κ³ μκ² μ£ ?
μμμ μ¬μ©νμ§ μλλ€λ©΄? → A, B, C λͺ¨λ νλνλ μ΄λ¦, μ±λ³μ λ£μ΄μ£Όμ΄μΌ ν©λλ€.
μμμ μ¬μ©νλ€λ©΄? → μΈκ°μ΄λΌλ ν΄λμ€ νλλ₯Ό λ§λ€κ³ A, B, Cλ μΈκ° ν΄λμ€λ₯Ό μμλ§ νλ©΄ λ©λλ€.
μμ μ½λ
class Human {
var name: String?
var gender: String?
}
- Human ν΄λμ€μ²λΌ λΆλͺ¨κ° μλ, μ¦ μ무κ²λ μμνμ§ μμ ν΄λμ€λ₯Ό κΈ°λ³Έ ν΄λμ€λΌκ³ ν©λλ€.
class Developer: Human {
var language: [String]?
}
- Developer ν΄λμ€λ₯Ό λ§λ€μ΄ 보μμ΅λλ€. κ°λ°μλ λͺ¨λ μ¬λμ΄κΈ°μ Human ν΄λμ€λ₯Ό μμμ λ°μμ΅λλ€.
- μ§κΈ Developer ν΄λμ€μμ μ΄λ¦κ³Ό μ±λ³ νΉμ±μ΄ μμ΄ λ³΄μ΄μ§λ§ Human ν΄λμ€λ₯Ό μμ λ°μκΈ°μ gender, name λͺ¨λ μ κ·Ό κ°λ₯ν©λλ€.
- (μ¬κΈ°μ λΆλͺ¨ ν΄λμ€λ Human, μμ ν΄λμ€λ Developer μ λλ€.)
μ€λ²λΌμ΄λ© (μ¬μ μ)
- μμμ νλ©΄ λΆλͺ¨ ν΄λμ€μ μμ±μ κ·Έλλ‘ λ¬Όλ €λ°μ λΏ μλλΌ λΆλͺ¨μ νΉμ±μ λ€μ μ μν μ μμ΅λλ€. μ΄κ±Έ μ€λ²λΌμ΄λ©μ΄λΌκ³ ν©λλ€.
λ©μλ μ€λ²λΌμ΄λ©
class Human {
var name: String?
var gender: String?
func introduce() {
print("μλ
νμΈμ~ μ μ¬λμ
λλ€.")
}
}
class Developer: Human {
var language: [String]?
// μ€λ²λΌμ΄λ©
override func introduce() {
print("μλ
νμΈμ~ μ κ°λ°μμ
λλ€.")
}
}
let developer = Developer()
developer.introduce() // μλ
νμΈμ~ μ κ°λ°μμ
λλ€.
- Humanν΄λμ€μ μΈμΏλ§μΈ introduce λ©μλλ₯Ό μ¬μ μλ₯Ό ν μ½λμ λλ€.
- μμ override ν€μλλ₯Ό λΆμ¬μ£Όκ³ μ¬μ μλ₯Ό νλ©΄ λμ΄μ λΆλͺ¨ ν΄λμ€μ introduceλ νΈμΆλμ§ μμ΅λλ€.
νλ‘νΌν° μ€λ²λΌμ΄λ©
- νλ‘νΌν°λ₯Ό μ¬μ μ νλ€? → νλ‘νΌν°μ getter, setterλ₯Ό μ 곡 or didSet, willSet(κ΄μ°°μ)λ₯Ό μΆκ°ν μ μλ€!
μ μ₯ νλ‘νΌν°
- μ μ₯ νλ‘νΌν° → μ μ₯ νλ‘νΌν°λ‘ μ€λ²λΌμ΄λ© β
- μ μ₯ νλ‘νΌν° → μ½κΈ°μ μ© νλ‘νΌν° μ€λ²λΌμ΄λ© β
- μ μ₯ νλ‘νΌν° μμ²΄κ° μ½κΈ°μ μ°κΈ° λͺ¨λ κ°λ₯ν νλ‘νΌν°μΈλ° μ½κΈ° μ μ©μΌλ‘ μ νν μ μκΈ° λλ¬Έμ λλ€.
class Human {
var name: String = "Human"
var gender: String?
}
class Developer: Human {
var alias = ""
// getter, setterλ₯Ό λͺ¨λ ꡬννλ©΄ μ μ₯ νλ‘νΌν° μ€λ²λΌμ΄λ© κ°λ₯
override var name: String {
get {
return alias
}
set {
alias = newValue
}
}
}
- μ μ₯ νλ‘νΌν°λ₯Ό μ€λ²λΌμ΄λ© νκ³ μΆλ€λ©΄?
- get, set λͺ¨λ ꡬννλ©΄ λ©λλ€!
νλ‘νΌν° μ΅μ λ²
class Human {
var name: String = "Human"
var gender: String?
}
class Developer: Human {
override var name: String {
willSet {
print("\\(newValue)λ‘ λ°λ μμ ")
}
didSet {
print("\\(oldValue)μμ κ° λ°λ")
}
}
}
let developer = Developer()
developer.name = "yoooung"
// yoooungλ‘ λ°λ μμ
// Humanμμ κ° λ°λ
- μ€λ²λΌμ΄λ©ν΄μ νλ‘νΌν° μ΅μ λ²λ μΆκ° κ°λ₯ν©λλ€.
λ§μ½ μμμ λͺ»νκ² λ§κ³ μΆλ€λ©΄?
final class ProfileModifyViewController: UIViewController {
}
final class ChallengeInfoView: UIView {
}
- final ν€μλλ₯Ό ν΄λμ€ μμ λΆμ¬μ£Όλ©΄ λ©λλ€.
- μ₯μ
- λ μ΄μ μ΄ ν΄λμ€λ μμν νμκ° μλ€! λΌλ κ±Έ μλ €μ€ μ μμ΅λλ€.
- λΉλ μλκ° ν₯μλ©λλ€.
- μ λ μ΅κ΄μ μΌλ‘ μμν νμμλ ViewControllerλ Viewμ κΌ λΆμ¬μ£Όλ νΈμ λλ€.
μ°Έκ³
https://babbab2.tistory.com/125
https://babbab2.tistory.com/126
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/inheritance/
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[swift] λ©μλ (0) | 2023.12.29 |
---|---|
[swift] κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (Object Oriented Programming) (0) | 2023.12.29 |
[Swift Language Guide] ν΄λμ€ μμκ³Ό μ΄κΈ°ν (Class Inheritance and Initialization) (0) | 2023.06.20 |
Stringμ μ subscriptλ‘ μ κ·Όμ΄ μλλμ§ μ€λͺ νμμ€. (0) | 2023.03.20 |