swift λ¬Έλ²•πŸ–€

[SWIFT] μƒμ„±μž

eundeang 2023. 3. 7. 21:25

1️⃣ꡬ쑰체 μƒμ„±μž

-  μ—¬λŸ¬κ°œμ˜ μ§€μ • μƒμ„±μžλ₯Ό κ΅¬ν˜„

-  μ˜€λ²„λ‘œλ”© 지원 

 

2οΈβƒ£ν΄λž˜μŠ€ μƒμ„±μž

πŸ“μ§€μ •μƒμ„±μž(designated) (class, struct, enum)

 -  init(..)ν˜•νƒœ

 -  λͺ¨λ“  μ €μž₯ 속성을 μ΄ˆκΈ°ν™” 해야함 (μ˜΅μ…”λ„ κ°€λŠ₯)

 -  λ°˜λ“œμ‹œ μž¬μ •μ˜ν•΄μ•Όν•¨

 

πŸ“νŽΈμ˜μƒμ„±μž(convenience)  (only class) 

 -   λͺ¨λ“  μ €μž₯ 속성을 μ΄ˆκΈ°ν™” ν•  ν•„μš”κ°€ μ—†μŒ

 -   κ°œλ°œμžκ°€ νŽΈλ¦¬ν•˜κ²Œ 객체λ₯Ό λ§Œλ“€μ–΄ λ‚Ό 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” μž₯치

 -   μ €μž₯μ†μ„±μ˜ 기본값을 μ„€μ •ν•  수 μžˆλ‹€ (λͺ¨λ“  μ €μž₯ 속성을 μ„€μ •ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€)

 -   상속이 λ˜μ§€ μ•ŠλŠ”λ‹€

 

편의 μƒμ„±μžλ‘œ λ§Œλ“œλŠ” 것이 λ³΅μž‘λ„λ‚˜ μ‹€μˆ˜λ₯Ό 쀄일 수 μžˆλ‹€

 

κ°€λŠ₯ν•œ μ§€μ •μƒμ„±μžμ˜ 갯수λ₯Ό 쀄이고, νŽΈμ˜μƒμ„±μžμ—μ„œ μ§€μ •μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λ„λ‘ ν•˜λŠ” 것이 μ’‹λ‹€

 

μƒμ„±μžμ˜ 상속 

- μƒμ„±μžλŠ” λͺ¨λ“  μ €μž₯속성을 μ΄ˆκΈ°ν™”ν•˜λŠ” 도ꡬ기 λ•Œλ¬Έμ— , μ„œλΈŒν΄λž˜μŠ€μ— μ΅œμ ν™” βœ–οΈ

- μƒμ†λ˜μ§€ μ•Šκ³  μž¬μ •μ˜ν•˜λŠ” 것이 원칙 

 

✳️ 상속 κ·œμΉ™ 

🟑 1단계 ) μƒμœ„μ˜ μ§€μ •μƒμ„±μžμ— λŒ€ν•œ κ³ λ € 

(μƒμœ„) μ§€μ •μƒμ„±μžλΌλ©΄?

βœ”οΈν•˜μœ„ν΄λž˜μŠ€μ—μ„œ μ§€μ •μƒμ„±μžλ‘œ κ΅¬ν˜„ (μž¬μ •μ˜)

βœ”οΈν•˜μœ„ν΄λž˜μŠ€μ—μ„œ νŽΈμ˜μƒμ„±μžλ‘œ κ΅¬ν˜„ (μž¬μ •μ˜) 

βœ”οΈκ΅¬ν˜„ μ•ˆν•΄λ„ 됨


(μƒμœ„) νŽΈμ˜μƒμ„±μžλΌλ©΄?

βœ”οΈμž¬μ •μ˜ ν•˜μ§€ μ•Šμ•„λ„ 됨 

 

🟑 2단계) ν˜„μž¬λ‹¨κ³„μ˜ μƒμ„±μž κ΅¬ν˜„

μ§€μ •μƒμ„±μž? 

βœ”οΈλͺ¨λ“  μ €μž₯ 속성을 μ΄ˆκΈ°ν™” 해야함

βœ”οΈμŠˆνΌν΄λž˜μŠ€μ˜ μ§€μ • μƒμ„±μž 호좜

 

νŽΈμ˜μƒμ„±μž? 

βœ”οΈμ§€μ •μƒμ„±μž 호좜 해야함

 

μ§€μ •μƒμ„±μžλŠ” μž¬μ •μ˜ κ³ λ €κ°€ κ°€λŠ₯함

β‰οΈμžλ™μƒμ† 쑰건

- μƒˆ μ €μž₯ 속성이 μ•„μ˜ˆ 없을 λ•Œ

- 기본값이 μ„€μ •λ˜μ–΄ μžˆμ„ λ•Œ ( μ—λŸ¬ κ°€λŠ₯성이 사라짐 )

 

 

νŽΈμ˜μƒμ„±μžλŠ” μž¬μ •μ˜κ°€ μ›μΉ™μ μœΌλ‘œ λΆˆκ°€λŠ₯

β‰οΈμžλ™μƒμ† 쑰건

- μƒμœ„ μ§€μ •μƒμ„±μžλ₯Ό λͺ¨λ‘ μƒμ†ν•˜λŠ” 경우

1) μ§€μ •μƒμ„±μž λͺ¨λ‘ μžλ™μƒμ†μ˜ 경우 

2) μƒμœ„μ˜ μ§€μ •μƒμ„±μž λͺ¨λ‘ μž¬μ •μ˜ν•˜λŠ” 경우

-------------------------------------------------

 

πŸ“ν•„μˆ˜μƒμ„±μž (required)

πŸ“Œν•˜μœ„μƒμ„±μžλŠ” λ°˜λ“œμ‹œ ν•΄λ‹Ή ν•„μˆ˜ μƒμ„±μžλ₯Ό κ΅¬ν˜„ν•΄μ•Όν•¨

⁉️ μžλ™μƒμ† 쑰건

- λ‹€λ₯Έ μ§€μ • μƒμ„±μžλ₯Ό κ΅¬ν˜„ ν•˜μ§€ μ•Šμ„ λ•Œ

 

-------------------------------------------------

πŸ“μ‹€νŒ¨κ°€λŠ₯μƒμ„±μž (init?)

 ? μΈμŠ€ν„΄μŠ€ 생성에 μ‹€νŒ¨ν•  μˆ˜λ„ μžˆλŠ” κ°€λŠ₯성을 κ°€μ§„ μƒμ„±μž (class, struct, enum κ°€λŠ₯)

 

(동일단계 - 델리게이트 μ–΄ν¬λ‘œμŠ€)

 - init? (μ‹€νŒ¨κ°€λŠ₯)  ===> init (μ‹€νŒ¨λΆˆκ°€λŠ₯)  (호좜/μœ„μž„) (OK)

 - init ===> - init?  (호좜/μœ„μž„) (X)

 

 (상속관계 - 델리게이트 μ—…)

 - (μƒμœ„) init?  <=== (ν•˜μœ„) init  (호좜/μœ„μž„)  (X)

 - (μƒμœ„) init <=== (ν•˜μœ„) init?   (호좜/μœ„μž„)  (OK)

 

-------------------------------------------------

πŸ“μ†Œλ©Έμž(deinit) ---------------- classμ—μ„œλ§Œ 쑴재

? μƒμ„±μžμ™€ λ°˜λŒ€μ˜ κ°œλ… 

? μΈμŠ€ν„΄μŠ€κ°€ μ‚¬λΌμ§ˆ λ•Œ 호좜 λ˜λŠ” λ©”μ„œλ“œ 

? νŒŒλΌλ―Έν„° μ—†μŒ

? ν•˜λ‚˜μ˜ μ†Œλ©Έμžλ§Œ κ΅¬ν˜„ κ°€λŠ₯

  클래슀 ꡬ쑰체
μ§€μ •μƒμ„±μž init()
νŽΈμ˜μƒμ„±μž convenience init() x
ν•„μˆ˜μƒμ„±μž required init() x
μ‹€νŒ¨κ°€λŠ₯μƒμ„±μž  init?()
init!()
μ†Œλ©Έμž deinit{} x