🍎 iOS & Swift

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

taeeekki 2021. 10. 7. 16:42

 

πŸ’₯ μƒˆλ‘œμš΄ μ‹œμž‘

μ•ˆλ…•ν•˜μ„Έμš”, νƒœλΌμž…λ‹ˆλ‹€ γ€° πŸ‘‹

λΈ”λ‘œκ·Έμ— μƒˆλ‘œμš΄ μΉ΄ν…Œκ³ λ¦¬κ°€ μƒκ²ΌμŠ΅λ‹ˆλ‹€ γ€° (μ•Όν˜Έ)

λ­λƒκ΅¬μš”? λ°”λ‘œ '✨ iOSλ₯Ό μœ„ν•œ κ°œλ… 쏙쏙' μΉ΄ν…Œκ³ λ¦¬μΈλ°μš” γ€°

 

곡뢀λ₯Ό ν•˜λ‹€λ³΄λ©΄ 가끔씩(맨날) λͺ¨λ₯΄λŠ” κ°œλ…μ΄λ‚˜ ν‚€μ›Œλ“œ, 문법 등이 λ‚˜μ˜€λŠ”λ°

그런 λ‚΄μš©λ“€μ„ μ •λ¦¬ν•˜λ €κ³  ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

λ‹€μŒ λ‚΄μš©μ€ μ €μ˜ μΈμŠ€νƒ€ 개발 둜그 계정(@taekki.dev)에도 μ˜¬λΌκ°€λ‹ˆ λ§Žμ€ 관심 λΆ€νƒλ“œλ €μš” :)

 

이건 TMI인데 숫자 인덱싱이 μ„Έ 자리수죠!?

μ„Έ μžλ¦¬μˆ˜κΉŒμ§€ ν¬μŠ€νŒ… ν•  κ·Έ 날을 μœ„ν•¨μ΄λΌλŠ”...

뭐 κ·Έ λ‚  μ―€ 되면 μ‹€λ ₯이 μ‘°κΈˆμ€ λŠ˜μ–΄μžˆκ² λ„€μš”(ν•˜ν•˜)

 

그럼 였늘 ν¬μŠ€νŒ… μ‹œμž‘ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€ πŸ™Œ

 

 


 

πŸ’¬ λ“€μ–΄κ°€λ©°

typealias에 λŒ€ν•΄ κ³΅λΆ€ν•˜λ˜ 쀑에 ‘μ„œλΈŒν΄λž˜μ‹±μ—†μ΄ μ»€μŠ€ν…€ νƒ€μž…μ˜ 배열을 μ •μ˜ν•˜λŠ”λ° μœ μš©ν•˜λ‹€’ μš”λŸ° 이야기가 λ‚˜μ™€μ„œ μ„œλΈŒν΄λž˜μ‹±μ΄ 무엇인지 λ¨Όμ € μ•Œμ•„λ³΄λ„λ‘ ν•˜κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ 외에도 가끔씩 λΈ”λ‘œκ·Έλ‚˜ 각쒅 레퍼런슀λ₯Ό 찾아보닀보면 μ„œλΈŒν΄λž˜μ‹±μ΄λΌλŠ” 단어가 보이길래 이 참에 μ •λ¦¬ν•˜λ©΄ 쒋을 것 κ°™λ„€μš”!

 

 


 

🌱 μ„œλΈŒν΄λž˜μ‹±μ΄λž€?

ν•œ λ§ˆλ””λ‘œ λ§ν•΄μ„œ 상속(Inheritance)μž…λ‹ˆλ‹€. 상속은 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°ν•˜λ©΄ λ‹¨κ³¨λ‘œ λ‚˜μ˜€λŠ” κ°œλ…μž…λ‹ˆλ‹€. μ‹€μƒν™œμ—μ„œλŠ” 'μœ μ‚° 상속' μš”λŸ° ν‘œν˜„μœΌλ‘œ 많이 μ“°μž…λ‹ˆλ‹€. 보톡 λΆ€λͺ¨μ˜ μž¬μ‚°μ„ μžμ‹μ΄ λ¬Όλ €λ°›κ²Œ 되죠? 그럼 μƒμ†μ΄λΌλŠ” κ°œλ…μ„ λ‹€μŒκ³Ό 같이 정리할 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

 

상속 οΉ¦ λΆ€λͺ¨μ˜ 것을 μžμ‹μ΄ λ¬Όλ €λ°›λŠ” 것

 

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλ„ μš°λ¦¬λŠ” ν•΄λ‹Ή κ°œλ…μ„ μ°Ύμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹° λ“±μ˜ λ‹€λ₯Έ νŠΉμ§•λ“€μ„ 물렀받을 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ°œλ…μ„ μš°λ¦¬λŠ” 상속이라고 λΆ€λ¦…λ‹ˆλ‹€. 상속을 ν•΄μ£ΌλŠ” 클래슀λ₯Ό λΆ€λͺ¨ 클래슀(Super Class)라고 λΆ€λ₯΄κ³ , 상속을 λ°›λŠ” 클래슀λ₯Ό μžμ‹ 클래슀(Sub Class)라고 λΆ€λ¦…λ‹ˆλ‹€.

 

상속을 ν•˜λŠ” 방식을 λ””ν…ŒμΌν•˜κ²Œ λ‚˜λˆ„μ–΄ 보면 μ„œλΈŒν΄λž˜μ‹±(Subclassing)κ³Ό μ„œλΈŒνƒ€μ΄ν•‘(Subtyping)으둜 λ‚˜λ‰˜λŠ” κ²ƒμΈλ°μš”.

 

μ„œλΈŒν΄λž˜μ‹±μ€ 기쑴에 κ΅¬ν˜„λ˜μ–΄ μžˆλŠ” 클래슀λ₯Ό 톡해 μƒˆλ‘œμš΄ 클래슀λ₯Ό λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€. κ΅¬ν˜„λ˜μ–΄ μžˆλŠ” 클래슀λ₯Ό μƒμ†ν•œλ‹€λŠ” 점이 μ„œλΈŒνƒ€μ΄ν•‘κ³Ό λ‹€λ₯Έ λΆ€λΆ„μž…λ‹ˆλ‹€. 정리λ₯Ό 해보면 μ„œλΈŒν΄λž˜μ‹±μ„ 톡해 λΆ€λͺ¨ 클래슀(Super Class)에 κ΅¬ν˜„λœ μ½”λ“œμ™€ ꡬ쑰λ₯Ό μžμ‹ 클래슀(Sub Class)κ°€ 물렀받을 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 클래슀의 μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ 자기 μžμ‹ λ§Œμ˜ κ³ μœ ν•œ λ‚΄μš©μ„ μΆ”κ°€ν•  μˆ˜λ„ μžˆλ‹΅λ‹ˆλ‹€.

 


 

πŸ§‘πŸ»‍πŸ’» μ˜ˆμ‹œ μ½”λ“œ

// λΆ€λͺ¨ 클래슀(Super Class)
class Drink {
    var name = "Unknown"
    var alcohol = 0.0
    
    init(name: String, alcohol: Double) {
        self.name = name
        self.alcohol = alcohol
    }
    
    func drink() {}
}
// μžμ‹ 클래슀(Sub Class)
class Soju: Drink {
    var kcal = 900
    var emergencyMessage: String {
        return "μ†Œμ£ΌλŠ” 500ccλ‹Ή \(kcal)λ‹€...πŸ’₯"
    }
}
let jinro = Soju(name: "μ§„λ‘œ", alcohol: 16.9)
print(jinro.alcohol) // λΆ€λͺ¨ 클래슀의 ν”„λ‘œνΌν‹°
print(jinro.emergencyMessage) // μžμ‹ ν΄λž˜μŠ€μ— μƒˆλ‘­κ²Œ κ΅¬ν˜„ν•œ ν”„λ‘œνΌν‹°

 


 

✨ λ§ˆλ¬΄λ¦¬ν•˜λ©°

μ•Œμ•„λ³΄λ‹ˆ μš°λ¦¬κ°€ 기쑴에 μ•Œκ³  μžˆμ—ˆλ˜ 상속 κ°œλ…μ„ λΆ€λ₯΄λŠ” λ§μ΄μ—ˆλ„€μš”. 상속 λ°›λŠ” ν–‰μœ„λ₯Ό μš°λ¦¬λŠ” μ„œλΈŒ ν΄λž˜μ‹±μ΄λΌκ³  λΆ€λ₯΄κ³  있던 것이죠.. λ””ν…ŒμΌν•˜κ²Œ 보면 μ„œλΈŒν΄λž˜μ‹±κ³Ό μ„œλΈŒνƒ€μ΄ν•‘μœΌλ‘œ μƒμ†μ˜ 방식이 λ‚˜λ‰˜μ§€λ§Œ 두 κ°€μ§€ λͺ¨λ‘ 상속을 ν•˜λŠ” ν–‰μœ„μΈ 것은 λ™μΌν•˜λ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν—ˆλ¬΄ν•˜μ§€λ§Œ 였늘의 κ°œλ… 곡뢀 성곡! πŸ™‹πŸ»‍♂️

 


 

πŸ—‚ 레퍼런슀

https://epicdevsold.tistory.com/177

https://jusung.gitbook.io/the-swift-language-guide/language-guide/13-inheritance