λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⌨️ Language/swift

[Swift] 상속

by hyebin (Helia) 2024. 3. 22.
λ°˜μ‘ν˜•

상속(Inheritance)

  • ν΄λž˜μŠ€μ—μ„œ λ‹€λ₯Έ 클래슀둜 λΆ€ν„° 상속할 수 있음
  • ν΄λž˜μŠ€μ—μ„œ μ €μž₯ ν”„λ‘œνΌν‹°, 계산 ν”„λ‘œνΌν‹° 상관없이 상속 받은 ν”„λ‘œνΌν‹°μ— ν”„λ‘œνΌν‹° μ˜΅μ €λ²„λ₯Ό μ‚¬μš©ν•΄ κ°’ 섀정에 λ°˜μ‘ν•  수 있음

기반클래슀

λ‹€λ₯Έ μ–΄λ–€ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받지 μ•Šμ€ 클래슀 SomeSuperclass

μ„œλΈŒν΄λž˜μ‹±

λΆ€λͺ¨λ‘œ λΆ€ν„° 성격을 상속받고 μžμ‹  고유의 νŠΉμ„±λ„ μΆ”κ°€ν•  수 있음

class SomeSubclass: SomeSuperclass {
	// subclass definition goes here
}

μ„œλΈŒν΄λž˜μ‹±μ€ 계속할 수 있음

 

μ˜€λ²„λΌμ΄λ”© (Overriding)

  • μ„œλΈŒν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ν΄λž˜μŠ€μ—μ„œ 상속받은 것을 μž¬μ •μ˜
  • μΈμŠ€ν„΄μŠ€, λ©”μ†Œλ“œ, νƒ€μž… λ©”μ†Œλ“œ, μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°, νƒ€μž… ν”„λ‘œνΌν‹°, μ„œλΈŒμŠ€ν¬λ¦½νŠΈ λͺ¨λ‘ κ°€λŠ₯
  • λ‹€λ₯Έ μ„ μ–Έ μ•žμ— overrideν‚€μ›Œλ“œ λΆ™μ—¬ μ‚¬μš©

λΆ€λͺ¨ν΄λž˜μŠ€μ˜ λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹°, μ„œλΈŒμŠ€ν¬λ¦½νŠΈμ˜ μ ‘κ·Ό

superν‚€μ›Œλ“œμ™€ 점문법 ν˜Ήμ€ 인덱슀 ꡬ문으둜 λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹°, μ„œλΈŒμŠ€ν¬λ¦½νŠΈμ— μ ‘κ·Ό

ex) super.someMethod, super.someProperty, super[someIndex]

 

λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ“œ

λ©”μ†Œλ“œ μ„ μ–Έ μ•žμ— override ν‚€μ›Œλ“œ μ‚¬μš©

 

ν”„λ‘œνΌν‹° μ˜€λ²„λΌμ΄λ“œ

  • μ„œλΈŒν΄λž˜μŠ€μ—μ„œλŠ” 상속받은 μ €μž₯된 ν”„λ‘œνΌν‹°, κ³„μ‚°λœ ν”„λ‘œνΌν‹° λͺ¨λ‘ μ˜€λ²„λΌμ΄λ“œ κ°€λŠ₯
    • (μ˜€λ²„λΌμ΄λ“œ μ‹œ, ν”„λ‘œνΌν‹° 이름과 νƒ€μž… λͺ…μ‹œ
  • μ„œλΈŒν΄λž˜μŠ€μ—μ„œλŠ” λ‹¨μˆœνžˆ 상속받은 νŠΉμ • ν˜•μ˜ ν”„λ‘œνΌν‹°κ°€ μžˆλ‹€λŠ” μ •λ„λ§Œ μ•Œκ³  있기 λ•Œλ¬Έμ— 상속받은 μ½κΈ°μ „μš© ν”„λ‘œνΌν‹°λ”λΌλ„ getter/setterλ₯Ό μ •μ˜ν•΄μ„œ 읽고/μ“°κΈ°κ°€ κ°€λŠ₯ν•œ ν”„λ‘œνΌν‹°λ‘œ λ³€κ²½ν•΄μ„œ 제곡 κ°€λŠ₯

 

ν”„λ‘œνΌν‹° μ˜΅μ €λ²„ μ˜€λ²„λΌμ΄λ“œ

이미 λΆ€λͺ¨ν΄λž˜μŠ€μ— μ„ μ–Έλœ ν”„λ‘œνΌν‹° μ˜΅μ €λ²„λ„ μ„œλΈŒν΄λž˜μŠ€μ— μž¬μ •μ˜ν•΄ μ‚¬μš© κ°€λŠ₯

 

πŸ’‘

  • μƒμˆ˜ ν”„λ‘œνΌν‹°μ™€ μ½κΈ°μ „μš© ν”„λ‘œνΌν‹°μ—λŠ” μ˜΅μ €λ²„λ₯Ό 뢙일 수 μ—†μŒ
    • μ •μ˜ κ·ΈλŒ€λ‘œ set을 ν•  수 μ—†λŠ” ν”„λ‘œνΌν‹°μ΄κΈ° λ•Œλ¬Έ
  • 같은 ν”„λ‘œνΌν‹°μ— μ˜΅μ €λ²„λ₯Ό μΆ”κ°€ν•˜κ³  setterλ₯Ό μΆ”κ°€ν•΄ λ‘˜μ„ λ™μ‹œμ— μ‚¬μš©ν•  수 μ—†μŒ
    • 이미 setterλ₯Ό μ„€μ •ν–ˆλ‹€λ©΄ μ˜΅μ €λ²„λ₯Ό 뢙인 것과 같은 λ™μž‘μ„ ν•˜κΈ° λ•Œλ¬Έ

 

μ˜€λ²„λΌμ΄λ“œ λ°©μ§€

  • μ„œλΈŒν΄λž˜μŠ€μ—μ„œ νŠΉμ • λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹°, μ„œλΈŒμŠ€ν¬λ¦½νŠΈκ°€ μ˜€λ²„λΌμ΄λ“œ λ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ finalν‚€μ›Œλ“œλ₯Ό μ‚¬μš©
    • final둜 μ„ μ–Έλ˜λ©΄ overrideλ˜λŠ” 것을 막을 수 있음.
    • final func, final class func, final subscript
  • 만일 final둜 μ„ μ–Έλœ λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹°, μ„œλΈŒμŠ€ν¬λ¦½νŠΈλ₯Ό μ˜€λ²„λΌμ΄λ“œ ν•˜λ €κ³  ν•˜λ©΄ 컴파일 μ‹œκ°„μ— μ—λŸ¬κ°€ λ°œμƒ
    • 클래슀 전체λ₯Ό final둜 μ„ μ–Έν•΄μ„œ 클래슀 μ•ˆμ˜ λͺ¨λ“  λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹° 등이 overrideκ°€ λ˜λŠ” 것 λ°©μ§€ κ°€λŠ₯
    • final class
λ°˜μ‘ν˜•

'⌨️ Language > swift' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Swift] μ˜΅μ…”λ„ 체이닝  (0) 2024.03.26
[Swift] μ΄ˆκΈ°ν™”  (1) 2024.03.25
[Swift] μ„œλΈŒμŠ€ν¬λ¦½νŠΈ  (0) 2024.03.22
[Swift] λ©”μ„œλ“œ  (0) 2024.03.21
[Swift] ν”„λ‘œνΌν‹°  (0) 2024.03.20