πŸ‘©πŸ»‍πŸ’» iOSun
article thumbnail

상속

μƒμ†μ΄λž€?

  • 상속은 였직 ν΄λž˜μŠ€μ—μ„œλ§Œ κ°€λŠ₯ν•˜λ©° λΆ€λͺ¨μ˜ λ©”μ†Œλ“œμ™€ ν”„λ‘œνΌν‹°μ™€ 같은 νŠΉμ„±λ“€μ„ κ·ΈλŒ€λ‘œ λ¬Όλ €λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.

상속을 μ™œ μ‚¬μš©ν• κΉŒ?

  • 상속은 λΆ€λͺ¨μ˜ νŠΉμ„±μ„ κ·ΈλŒ€λ‘œ 물렀받을 수 있기 λ•Œλ¬Έμ— μ€‘λ³΅λœ μ½”λ“œ μž‘μ„±μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 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

 

Swift) 상속(Inheritance) μ •λ³΅ν•˜κΈ° (1/2) - μƒμ†μ΄λž€?

μ•ˆλ…•ν•˜μ„Έμš”!!! μ†Œλ“€μž…λ‹ˆλ‹€ :)))) μ–Όλ₯Έ Swift 문법 ν¬μŠ€νŒ…μ„ λͺ¨λ‘ 끝..ㄴㅐ고.... iOS와 Rxswift ν¬μŠ€νŒ…μœΌλ‘œ λ„˜μ–΄κ°€κ³  싢은...... μ†Œλ“€μ˜... λ°”λžŒμ€.. μ–Έμ œμ―€.. μ΄λ€„μ§ˆμ§€.. πŸ‚πŸ‚ μ¨Œλ“  이번 ν¬μŠ€νŒ…μ€ "상속"에

babbab2.tistory.com

https://babbab2.tistory.com/126

 

Swift) 상속(Inheritance) μ •λ³΅ν•˜κΈ° (2/2) - μ˜€λ²„λΌμ΄λ”©(Overriding)

μ•ˆλ…•ν•˜μ„Έμš” :) μ†Œλ“€μž…λ‹ˆλ‹€ ν˜Έν™‹ μ €λ²ˆ μƒμ†μ˜ κΈ°λ³Έ κ°œλ…(κΈ°λ³Έ 클래슀, μ„œλΈŒ ν΄λž˜μ‹± λ“±)에 λŒ€ν•΄ μ•Œμ•˜λ‹€λ©΄, 이번 ν¬μŠ€νŒ…μ—μ„  "μ˜€λ²„λΌμ΄λ”©"에 λŒ€ν•΄ 곡뢀할 κ±°μ˜ˆμš”!!!! μ˜€λ²„λΌμ΄λ”©.... λ­”κ°€ μ—„μ²­λ‚˜κ²Œ 많

babbab2.tistory.com

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/inheritance/

 

Documentation

 

docs.swift.org

 

profile

πŸ‘©πŸ»‍πŸ’» iOSun

@iosun

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!

profile on loading

Loading...