Swift - 클래슀 상속과 μž¬μ •μ˜

2022. 7. 6. 11:27ㆍios

Swift - 클래슀 상속과 μž¬μ •μ˜

 

 

μ•ˆλ…•ν•˜μ„Έμš” μ˜€λŠ˜μ€ swiftμ—μ„œμ˜ 클래슀, 상속, μž¬μ •μ˜μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

클래슀

ν΄λž˜μŠ€λŠ” "μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±μ‹œν‚€λŠ” ν‹€" μž…λ‹ˆλ‹€. 

 

클래슀λ₯Ό μ„€λͺ…ν•˜λŠ” μ˜ˆμ‹œμ—μ„œλŠ” λΆ•μ–΄λΉ΅ ν‹€κ³Ό 뢕어빡을 μ˜ˆμ‹œλ‘œ 많이 λ“œλŠ”λ°μš”, λΆ•μ–΄λΉ΅ 틀을 ν†΅ν•΄μ„œ 뢕어빡을 λ§Œλ“œλŠ” κ²ƒμœΌλ‘œ λΆ•μ–΄λΉ΅ 틀이 μ—¬κΈ°μ„œ "클래슀"이고 뢕어빡이 "μΈμŠ€ν„΄μŠ€(객체)"μž…λ‹ˆλ‹€.

 

클래슀λ₯Ό 곡μž₯, μΈμŠ€ν„΄μŠ€λ₯Ό μ œν’ˆμ΄λΌκ³  이해해도 쒋을 것 κ°™λ„€μš”.

 

Swiftμ—μ„œ ν΄λž˜μŠ€λŠ” μ–΄λ–»κ²Œ μƒκ²¨μžˆλŠ”μ§€ ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

클래슀

 

μœ„μ˜ μ½”λ“œμ—μ„œ age, name, height와 같은 뢀뢄듀을 "μ €μž₯ 속성"이라고 λΆ€λ₯΄κ³ , init() {}의 ν•¨μˆ˜λ₯Ό "μƒμ„±μž" 라고 λΆ€λ¦…λ‹ˆλ‹€.

클래슀λ₯Ό ν†΅ν•΄μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±μ‹œν‚¬ λ•ŒλŠ” μ €μž₯μ†μ„±μ˜ λͺ¨λ“  값듀이 μ΄ˆκΈ°ν™”λ˜μ–΄μ•Ό ν•˜λŠ”κ²Œ swift κ·œμΉ™μž…λ‹ˆλ‹€. 

 

이제 Person클래슀λ₯Ό ν†΅ν•΄μ„œ μ—¬λŸ¬λͺ…μ˜ μ‚¬λžŒ μΈμŠ€ν„΄μŠ€λ“€μ„ λ§Œλ“€ 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 

 

μ§€κΈˆλ„ μœ μš©ν•˜μ§€λ§Œ κ°œλ°œμžλ“€μ€ 이 Person 클래슀λ₯Ό 쑰금 더 κ΅¬μ²΄ν™”ν•˜κ³  μ‹Άλ‹€λŠ” 생각이 λ“€κ²Œ λ©λ‹ˆλ‹€. 

κ·Έλž˜μ„œ λ‚˜μ˜¨ κ°œλ…μ΄ "상속" μž…λ‹ˆλ‹€.

 

StudentλΌλŠ” 클래슀λ₯Ό μƒˆλ‘œ μ •μ˜ν–ˆμ„ λ•Œ Person클래슀λ₯Ό μƒμ†μ‹œν‚€κ²Œ 되면 Studentν΄λž˜μŠ€λŠ” Person클래슀의 속성을 λ‹€μ‹œ μ •μ˜ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€.

 

클래슀 상속

 

μœ„μ™€κ°™μ΄ 상속을 계속 μ§„ν–‰ν•˜λ‹€ 보면 μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜κ³  싢은 κ²½μš°κ°€ μƒκΉλ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄ Personν΄λž˜μŠ€μ—μ„œμ˜ λ©”μ„œλ“œλ₯Ό Studentμ—μ„œλŠ” 쑰금 더 κ΅¬μ²΄ν™”μ‹œν‚€κ³  싢을 λ•Œ λ‹€μŒκ³Ό 같이 μž‘μ„±ν•©λ‹ˆλ‹€.

 

 

override ν‚€μ›Œλ“œκ°€ μƒˆλ‘œ μƒκΈ΄κ²Œ λ³΄μ΄μ‹œλ‚˜μš”?

이처럼 μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•  λ•ŒλŠ” overrideν‚€μ›Œλ“œλ₯Ό μž‘μ„±ν•˜κ³  μž¬μ •μ˜ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ Person을 "λΆ€λͺ¨ 클래슀" Studentλ₯Ό "μžμ‹ 클래슀" 라고 λΆ€λ¦…λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ μž¬μ •μ˜ ν•  λ•Œ μ£Όμ˜ν•  점이 μžˆλŠ”λ°μš”, μ€‘μš”ν•œ κ·œμΉ™μ΄ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— μˆ™μ§€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

 

μž¬μ •μ˜ κ·œμΉ™μ„ μ•Œμ•„λ³΄κΈ° 전에 μ‚¬μ „κ°œλ…μ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

계산속성

 

μ €μž₯속성은 var a: Int = 3 μ²˜λŸΌ 기본적인 속성을 λ§ν•©λ‹ˆλ‹€. μ €μž₯속성에 λŒ€λΉ„λ˜λŠ” κ°œλ…μ΄ μžˆλŠ”λ° λ°”λ‘œ "계산 속성"μž…λ‹ˆλ‹€.

 

계산속성은 Swift ν΄λž˜μŠ€μ—μ„œ νŽΈλ¦¬ν•˜κ²Œ 속성값에 μ ‘κ·Ό 및 μˆ˜μ •ν•  수 μžˆλ„λ‘ λ§Œλ“  속성인데 λ©”μ„œλ“œμ²˜λŸΌ λ™μž‘ν•œλ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

 

계산속성 μ‚¬μš©λ²•

 

 

λΆ„λͺ…νžˆ 속성인데 "원할 λ•Œ λ™μ μœΌλ‘œ κ³„μ‚°ν•΄μ„œ λ©”λͺ¨λ¦¬μ— μ €μž₯μ‹œν‚¨λ‹€λŠ” 점"이 μƒλ‹Ήνžˆ μœ μš©ν•΄ λ³΄μž…λ‹ˆλ‹€.

 

μ†μ„±κ°μ‹œμž

μ†μ„±κ°μ‹œμžλŠ” "μ €μž₯속성+λ³€ν™”μ‹œν‚¬ λ©”μ„œλ“œ"의 ν˜•νƒœλ‘œ μ†μ„±μ˜ λ³€ν™”λ₯Ό κ°μ‹œν•΄μ„œ νŠΉμ •ν•œ λ‘œμ§μ„ μ μš©μ‹œν‚€λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

 

 

ν•΄λ‹Ή 속성이 λ³€ν™”λ˜μ—ˆμ„ λ•Œ didSetν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œν‚€λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 μ†μ„±κ°μ‹œμžμž…λ‹ˆλ‹€.

 

 

이제 μž¬μ •μ˜μ˜ λŒ€μ›μΉ™λ“€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

μ €μž₯속성은 μž¬μ •μ˜ν•  수 μ—†λ‹€.

 

μ €μž₯속성은 기본적으둜 "λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•˜λŠ” λ³€μˆ˜"μž…λ‹ˆλ‹€.

 

상속을 ν•  λ•Œ μžμ‹ν΄λž˜μŠ€μ— λΆ€λͺ¨ ν΄λž˜μŠ€μ— μžˆλŠ” λ³€μˆ˜κ°€ 직접 μ΄λ™ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀의 λ³€μˆ˜λ₯Ό "μ°Έμ‘°"ν•˜κ³  있기 λ•Œλ¬Έμ— μž¬μ •μ˜λ₯Ό ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

속성을 직접 μž¬μ •μ˜ν•  μˆ˜λŠ” μ—†μ§€λ§Œ 속성을 λ©”μ„œλ“œμ²˜λŸΌ(μ‹€μ œλ‘œ λ©”μ„œλ“œλŠ” μ•„λ‹˜) λ§Œλ“€ μˆ˜λŠ” μžˆμŠ΅λ‹ˆλ‹€.

 

λ°”λ‘œ μœ„μ—μ„œ ν•™μŠ΅ν•œ "계산속성"κ³Ό "μ†μ„±κ°μ‹œμž"둜 λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€. 

μ΄λŠ” λ©”λͺ¨λ¦¬λ₯Ό 직접 μ΄μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ κΈ°λŠ₯을 "μΆ”κ°€"ν•˜λŠ” 것이기 λ•Œλ¬Έμ— κ°€λŠ₯ν•©λ‹ˆλ‹€. 

 

ν•˜μ§€λ§Œ κΈ°λ³Έ μ €μž₯속성을 "읽기/μ“°κΈ°" κ³„μ‚°μ†μ„±μœΌλ‘œ λ°”κΎΈλŠ” 것은 κ°€λŠ₯ν•˜μ§€λ§Œ "읽기"κΈ°λŠ₯만 ν•˜λŠ” κ³„μ‚°μ†μ„±μœΌλ‘œ λ°”κΎΈκΈ° λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 이 뢀뢄도 μ°Έκ³ ν•΄μ„œ μ•Œμ•„λ‘μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

κ³„μ‚°μ†μ„±μ˜ μž¬μ •μ˜

계산속성은 λ©”μ„œλ“œμ˜ ν˜•νƒœλ‘œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— λ©”μ„œλ“œμ˜ ν˜•νƒœλ‘œ μž¬μ •μ˜λ₯Ό ν•΄μ•Όν•©λ‹ˆλ‹€.

 

기쑴의 "읽기/μ“°κΈ°"의 κΈ°λŠ₯을 ν•˜λŠ” 계산속성을 "읽기/μ“°κΈ°"의 κΈ°λŠ₯을 ν•˜λŠ” κ³„μ‚°μ†μ„±μœΌλ‘œ μž¬μ •μ˜κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€. 

그리고 "읽기"의 κΈ°λŠ₯을 ν•˜λŠ” 계산속성을 "읽기/μ“°κΈ°"의 κΈ°λŠ₯으둜 λ§Œλ“œλŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ "읽기/μ“°κΈ°"λ₯Ό "읽기"둜 λ°”κΎΈλŠ” 것은 λΆˆκ°€λŠ₯ν•˜κΈ°μ— "κΈ°λŠ₯ μœ μ§€λ° ν™•λŒ€λŠ” κ°€λŠ₯ν•˜μ§€λ§Œ μΆ•μ†ŒλŠ” λΆˆκ°€λŠ₯ν•˜λ‹€"라고 μ•Œκ³  κ³„μ‹œλ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

 

λ©”μ„œλ“œ μž¬μ •μ˜

λ©”μ„œλ“œλŠ” 속성과 λ‹€λ₯΄κ²Œ λΆ€λͺ¨ν΄λž˜μŠ€κ°€ μžμ‹ν΄λž˜μŠ€μ— 상속이 될 λ•Œ μƒˆλ‘œμš΄ λ°°μ—΄μ˜ ν˜•νƒœλ‘œ λ©”μ„œλ“œλ“€μ„ κ°€μ§€κ²Œ λ©λ‹ˆλ‹€.

 

즉 속성은 μžμ‹ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ν΄λž˜μŠ€μ˜ 속성에 μ ‘κ·Όν•  수 있게 μ°Έμ‘°ν•˜κ³  μžˆμ—ˆλŠ”λ° λ©”μ„œλ“œλŠ” κ·Έ 자체둜 μžμ‹ ν΄λž˜μŠ€μ— μƒˆλ‘­κ²Œ κ΅¬ν˜„μ΄ λ˜μžˆλŠ” ν˜•νƒœμΈ κ²ƒμž…λ‹ˆλ‹€.

 

μ΄λŠ” ν΄λž˜μŠ€λ§ˆλ‹€ μƒˆλ‘œμš΄ λ©”μ„œλ“œκ°€ μžˆκΈ°μ— μž¬μ •μ˜κ°€ μžμœ λ‘­μŠ΅λ‹ˆλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'ios' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Swift - μ•„μŠ€ν‚€μ½”λ“œ λ³€ν™˜ν•˜κΈ°  (0) 2022.09.27
iOS - Realm  (0) 2022.09.19
swift - 싱글톀 νŒ¨ν„΄  (0) 2022.07.05
Swift - μ—΄κ±°ν˜•(enum), μ›μ‹œκ°’, μ—°κ΄€κ°’  (0) 2022.06.30
Swift- inout  (0) 2022.06.28