-
[Swift] μμ (Inheritance)iOS/Swift 2022. 8. 22. 23:08
π‘ ν΄λμ€λ λ©μλλ νλ‘νΌν° λ±μ λ€λ₯Έ ν΄λμ€λ‘λΆν° μμλ°μ μ μλ€!
μμ ν΄λμ€: μμλ°μ ν΄λμ€
λΆλͺ¨ ν΄λμ€: μμμκ² νΉμ±μ λ¬Όλ €μ€ ν΄λμ€
κΈ°λ° ν΄λμ€: λ€λ₯Έ ν΄λμ€λ‘λΆν° μμμ λ°μ§ μμ ν΄λμ€ν΄λμ€ μμ μ λΆλͺ¨ ν΄λμ€μ νλ‘νΌν°, λ©μλ λ±μ μ¬μ μνκ±°λ, μμ μ κΈ°λ₯μ μΆκ°ν μ μλ€
μ¬μ μ(override)
λΆλͺ¨ ν΄λμ€λ‘λΆν° λ¬Όλ €λ°μ νΉμ±μ κ·Έλλ‘ μ¬μ©νμ§ μκ³ λ³κ²½νμ¬ μ¬μ©νλ κ²
βοΈ μλ‘μ΄ μ μ μμ override ν€μλ μ¬μ©
Q. μ¬μ μλ₯Ό νκ³ λ λ€μ λΆλͺ¨ ν΄λμ€μ νΉμ±μ μ¬μ©νκ³ μΆλ€λ©΄?
βοΈ super ν€μλ
1οΈβ£ νλ‘νΌν° μ¬μ μ
- νλ‘νΌν°λ₯Ό μ¬μ μνλ κ²μ νλ‘νΌν° μμ²΄κ° μλλΌ, νλ‘νΌν°μ μ κ·Όμ, μ€μ μ, κ°μμ λ±μ μ¬μ μνλ κ²μ΄λ€
- λΆλͺ¨ ν΄λμ€μμ μ½κΈ° μ μ©μ΄μλ νλ‘νΌν°λ₯Ό μ½κΈ°, μ°κΈ°κ° κ°λ₯ν νλ‘νΌν°λ‘ μ¬μ μν μ μλ€
class Person { var name: String = " " var age: Int = 0 var koreanAge: Int { return self.age + 1 } } // Person ν΄λμ€ μμ λ° μ¬μ μ class Student:Person { var grade: Int = 1 // μ½κΈ° μ μ© -> μ½κΈ°, μ°κΈ°κ° κ°λ₯ν νλ‘νΌν°λ‘ μ¬μ μ override var koreanAge: Int { get { return super.koreanAge } set { self.age = newValue - 1 } } } // μΈμ€ν΄μ€ μμ± let yeonsu: Student = Student() // μΈμ€ν΄μ€ μ¬μ© yeonsu.age = 24 print(yeonsu.koreanAge) // 25
2οΈβ£ νλ‘νΌν° κ°μμ μ¬μ μ
- μμ ν΄λμ€μμ νλ‘νΌν° κ°μμλ₯Ό μ¬μ μνλ©΄, λΆλͺ¨ ν΄λμ€μμ μ μν νλ‘νΌν° κ°μμλ κ°μ΄ λμνλ€
- νλ‘νΌν° μ κ·Όμμ νλ‘νΌν° κ°μμλ λμμ μ¬μ μ ν μ μλ€
// ================= < νλ‘νΌν° κ°μμ μ¬μ μ > ================= class Person2 { var name: String = " " var age: Int = 0 { didSet { print("λ΄ λμ΄λ λλ \(self.age)μΈ") } } } // Person ν΄λμ€ μμ λ° μ¬μ μ class Student2:Person2 { var grade: Int = 1 // νλ‘νΌν° κ°μμ μ¬μ μ override var age: Int { didSet { print("λ΄ λμ΄λ μ’ λ λμ \(self.age)μΈ") } } } // μΈμ€ν΄μ€ μμ± let ddu: Student2 = Student2() // μΈμ€ν΄μ€ μ¬μ© ddu.age = 24 /* μΆλ ₯ κ²°κ³Ό(λΆλͺ¨ κ°μμλ κ°μ΄ λμ) λ΄ λμ΄λ λλ 24μΈ λ΄ λμ΄λ μ’ λ λμ 24μΈ */
π‘ μ¬μ μν μ μλλ‘ μ ννκ³ μΆλ€λ©΄
class ν€μλ μμ final ν€μλ λͺ μ
ν΄λμ€μ μ΄λμ λΌμ΄μ
μ’ λ₯
1οΈβ£ μ§μ μ΄λμ λΌμ΄μ
- ν΄λμ€μ νλ μ΄μ νμλ‘ μ μν΄μΌ νλ€
- init ν€μλ
2οΈβ£ νΈμ μ΄λμ λΌμ΄μ
- μ΄κΈ°νλ₯Ό μμ½κ² λμμ£Όλ μν μ΄λ€(νμX)
- μ§μ μ΄λμ λΌμ΄μ λ μΈμ€ν΄μ€λ₯Ό μμ±ν λλ§λ€ μ λ¬ μΈμλ‘ μ΄κΈ°κ°μ μ λ¬ν΄μΌ νμ§λ§, νΈμ μ΄λμ λΌμ΄μ λ νμ κ°μ κ°μΌλ‘ μ΄κΈ°νO
- convenience init ν€μλ
ν΄λμ€λ μμλ°μμ λ μ΄λμ λΌμ΄μ λ₯Ό μ΄λ»κ² μ¬μ μν κΉ?
κΈ°λ³Έμ μΌλ‘ μ€μννΈμ μ΄λμ λΌμ΄μ λ λΆλͺ¨ ν΄λμ€μ μ΄λμ λΌμ΄μ λ₯Ό μμλ°μ§ μλλ€
βοΈ μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€μ λκ°μ μ΄λμ λΌμ΄μ λ₯Ό ꡬνν΄μ£Όλ©΄ λλ€
βοΈ override μμμ΄ μ΄μ©
βοΈ μμ ν΄λμ€μμ λΆλͺ¨ ν΄λμ€μ νΈμ μ΄λμ λΌμ΄μ λ νΈμΆν μ μλ€!
(μμ ν΄λμ€μ νΈμ μ΄λμ λΌμ΄μ κ° λΆλͺ¨ ν΄λμ€μ μ§μ μ΄λμ λΌμ΄μ λ₯Ό μ¬μ μνλ κ²μ κ°λ₯νλ€)// ================= < ν΄λμ€ μ΄λμ λΌμ΄μ μ¬μ μ > ================= class Person3 { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } convenience init(name: String) { self.init(name: name, age: 0) } } class Manager:Person3 { var location: String // μ§μ μ΄λμ λΌμ΄μ μ¬μ μ override init(name: String, age: Int) { self.location = "Seoul" super.init(name: name, age: age) } }
π‘ TIP
λΆλͺ¨ ν΄λμ€μμλ μ€ν¨ κ°λ₯ν μ΄λμ λΌμ΄μ ( init? )λΌλ μμ ν΄λμ€μμλ νμμ λ°λΌ μ€ν¨ νμ§ μλ μ΄λμ λΌμ΄μ λ‘ μ μν μ μλ€!
μ΄λμ λΌμ΄μ μλ μμ 쑰건
1οΈβ£ μμ ν΄λμ€μμ νλ‘νΌν° κΈ°λ³Έκ°μ λͺ¨λ μ 곡νλ€
2οΈβ£ μμ ν΄λμ€μμ λ³λμ μ§μ μ΄λμ λΌμ΄μ λ₯Ό ꡬννμ§ μλλ€
3οΈβ£ λΆλͺ¨ ν΄λμ€μ μ§μ μ΄λμ λΌμ΄μ λ₯Ό λͺ¨λ μ¬μ μνμ¬ λΆλͺ¨ ν΄λμ€μ λμΌν μ§μ μ΄λμ λΌμ΄μ λ₯Ό λͺ¨λ μ¬μ©ν μ μλ€
μꡬ μ΄λμ λΌμ΄μ
βοΈ ν΄λμ€μ μ΄λμ λΌμ΄μ μμ required μμμ΄
- ν΄λμ€λ₯Ό μμλ°μ μμ ν΄λμ€μμλ λ°λμ ν΄λΉ μ΄λμ λΌμ΄μ λ₯Ό ꡬνν΄μΌ νλ€
- μμ ν΄λμ€μμ μꡬ μ΄λμ λΌμ΄μ λ₯Ό μ¬μ μνλ κ²½μ° override (X) required (O) μμμ΄ μ¬μ©μ μ μνμ!
- μ‘°μ - λΆλͺ¨ - μμ ν΄λμ€ κ΄κ³μμ μ‘°μ ν΄λμ€μ μΌλ° μ΄λμ λΌμ΄μ λ₯Ό λΆλͺ¨ ν΄λμ€μμ μꡬ μ΄λμ λΌμ΄μ λ‘ λ³κ²½ν κ²½μ°μλ required override μμμ΄λ₯Ό λͺ μν΄μΌ νλ€π¨ μꡬ μ΄λμ λΌμ΄μ μ§λ§ μλ μμλλ κ²½μ°
// ================= < μꡬ μ΄λμ λΌμ΄μ μ¬μ μ > ================= class School { var location: String required init() { self.location = "Unknown" } } class Student4:School { var major: String = "Unknown" } let bonny: Student4 = Student4()
1. Student4 ν΄λμ€μ major νλ‘νΌν°μ κΈ°λ³Έ κ°μ΄ μ‘΄μ¬νκ³
2. λ³λ€λ₯Έ μ§μ μ΄λμ λΌμ΄μ κ° μκΈ° λλ¬Έμ μ΄λμ λΌμ΄μ κ° μλμΌλ‘ μμλμλ€!
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘ν μ½(protocol) (0) 2022.08.31 [Swift] νμ μΊμ€ν (type casting) (0) 2022.08.24 [Swift] μλΈμ€ν¬λ¦½νΈ(subscript) (0) 2022.08.20 [Swift] λͺ¨λλ(Monad) (0) 2022.08.15 [Swift] 맡, νν°, 리λμ€(map, filter, reduce) (0) 2022.08.15