ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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. 별닀λ₯Έ 지정 μ΄λ‹ˆμ…œλΌμ΄μ €κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ΄λ‹ˆμ…œλΌμ΄μ €κ°€ μžλ™μœΌλ‘œ μƒμ†λ˜μ—ˆλ‹€!

     

     

     

Designed by Tistory.