🍎 iOS/Swift

[ Swift 기초 문법 ] ν”„λ‘œν† μ½œ (Protocol)

AHN.Jihyeon 2024. 6. 25. 08:04


 

 

πŸ”Ž  1 . ν”„λ‘œν† μ½œ(Protocol)


ν”„λ‘œν† μ½œμ€ μ˜μ–΄λ‘œ κ·œμ•½/ν˜‘μ•½μ•½, 즉 약속을 μ˜λ―Έν•œλ‹€. 

 

νƒ€μž…μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ œκ³΅ν•˜λŠ” 멀버 λͺ©λ‘μ΄λ‹€. 

ν”„λ‘œν† μ½œμ€ νƒ€μž…μ—μ„œ κ΅¬ν˜„ν•΄μ•Όν•˜λŠ” 멀버가 μ„ μ–Έλ˜μ–΄ 있고 μ‹€μ œ κ΅¬ν˜„μ€ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•Šλ‹€. 

ν΄λž˜μŠ€μ™€ κ΅¬μ‘°μ²΄λŠ” 섀계도에 λΉ„μœ ν•œλ‹€λ©΄, ν”„λ‘œν† μ½œμ€ μš”κ΅¬μ‚¬ν•­ μ •μ˜μ„œμ— λΉ„μœ ν•  수 μžˆκ² λ‹€. 

νƒ€μž…μ„ κ΅¬ν˜„ν•  λ•Œ μ—¬λŸ¬κ°€μ§€ μš”κ΅¬μ‚¬ν•­λ“€μ„ λͺ¨μ•„λ‘” μš”κ΅¬μ‚¬ν•­(약속/μ—­ν• ) μ •μ˜μ„œλΌκ³  λ³΄λ©΄λœλ‹€. 

 

νŠΉμ • 역할을 ν•˜κΈ° μœ„ν•œ λ©”μ„œλ“œ, ν”„λ‘œνΌν‹°, 기타 μš”κ΅¬μ‚¬ν•­ 등을 μ •μ˜ν•΄λ†“μ€ 약속이닀. 

클래슀, ꡬ쑰체, μ—΄κ±°ν˜•μ΄ ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜κ³  λͺ¨λ“  μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘±ν•˜λ©΄ ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν–ˆλ‹€κ³  ν•œλ‹€ . 

 

클래슀, ꡬ쑰체, μ—΄κ±°ν˜•μ΄ ν”„λ‘œν† μ½œμ„ μ±„νƒν•΄μ„œ νŠΉμ • κΈ°λŠ₯을 μ‹€ν–‰ν•˜κΈ° μœ„ν•œ ν”„λ‘œν† μ½œμ˜ μš”κ΅¬μ‚¬ν•­μ„ μ‹€μ œλ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€. 

 

 

ν”„λ‘œν† μ½œμ€ μ„€κ³„λœ μš”κ΅¬μ‚¬ν•­(약속/μ—­ν• )만 μ •ν•΄ 놓은 것이지 아직 슀슀둜 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ§„ μ•ŠλŠ”λ‹€. 

λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  λ•Œ λ©”μ„œλ“œ 이름과 리턴값을 지정할 수 있고, { }(κ΅¬ν˜„μ½”λ“œ)λŠ” 적지 μ•ŠλŠ”λ‹€. 

ꡬ체적인 κ΅¬ν˜„μ€ ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ κ³³μ—μ„œ ν•œλ‹€. 

 

λ”°λΌμ„œ, κ°œλ°œν•  λ•ŒλŠ” μ–΄λ–€ 객체가 ν•΄λ‹Ή 역할을 μˆ˜ν–‰ν• μ§€ μ •ν•˜κ³  

κ·Έ λ‹€μŒμ— ν•΄λ‹Ή 객체가 κ·Έ 역할을 μ–΄λ–»κ²Œ κ΅¬ν˜„ν• μ§€ μ •ν•˜λŠ” 것을 ν”„λ‘œν† μ½œμ„ μ±„νƒν–ˆλ‹€κ³  ν•œλ‹€. 

 

ν”„λ‘œν† μ½œμ—μ„œλŠ” 이름과 νƒ€μž„, gettable, settable을 λͺ…μ‹œν•œλ‹€. 

ν”„λ‘œνΌν‹°λŠ” 항상 var둜 μ„ μ–Έν•œλ‹€. 

 

 

상속과 μœ μ‚¬ν•˜μ§€λ§Œ 클래슀 이외에 κ΅¬μ‘°μ²΄λ‚˜ μ—΄κ±°ν˜•λ„ ν”„λ‘œν† μ½œμ„ 채택할 수 μžˆλ‹€. 

상속은 닀쀑 상속이 λΆˆκ°€ν•˜μ§€λ§Œ ν”„λ‘œν† μ½œμ€ 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€. (ν™•μž₯성이 λ†’μŒ)

enum TypeName: ProtocolName, ... {
}

struct TypeName: ProtocolName, ... {
}

//ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀λ₯Ό μƒμ†ν•˜κ³  λ™μ‹œμ— ν”„λ‘œν† μ½œμ„ μ±„μš©ν•˜κ³  μžˆλ‹€λ©΄, 슈퍼클래슀λ₯Ό λ¨Όμ € λ‚˜μ—΄ν•΄μ•Όν•œλ‹€.  
class TypeName: SuperClass, ProtocolName, ... {
}

 

 

//ν”„λ‘œν† μ½œ μ •μ˜



//ν”„λ‘œν† μ½œ 채택 및 κ΅¬ν˜„



//ν΄λž˜μŠ€μ—μ„œ 채택

 

 

 

 

πŸ”Ž  2. ν”„λ‘œν† μ½œμ΄ μ™œ ν•„μš”ν•œκ°€?


ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ 클래슀만 상속이 κ°€λŠ₯ν•˜λ‹€. 즉, 닀쀑상속이 λΆˆκ°€ν•˜λ‹€.

 

ν•„μš”ν•˜μ§€ μ•Šμ€ μƒμœ„ 클래슀의 μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œλ„ 상속이 λœλ‹€. 

 

ν΄λž˜μŠ€μ—μ„œλ§Œ 상속이 κ°€λŠ₯ν•˜λ‹€. 

 

=> ν΄λž˜μŠ€μ™€ μƒμ†μ˜ 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ ν•„μš©ν•œ ν”„λ‘œν† μ½œμ˜ κ°œλ…

 

κ°œλ°œν•˜λ‹€ 보면 λ‹€μ–‘ν•œ 객체듀을 λ§Œλ“€κ²Œ λœλ‹€. 

λ‹€μ–‘ν•œ 객체간에 곡톡 역할을 λ°œκ²¬ν•˜κ²Œ 되고, ν•΄λ‹Ή 역할을 ν•œμ •λœ κ°μ²΄μ—μ„œλ§Œ μ‚¬μš©ν•˜μ§€ μ•Šκ³ 

μ—¬λŸ¬ 객체둜 ν™•μž₯이 ν•„μš”ν•  λ•Œ, κ·Έ 역할을 ν”„λ‘œν† μ½œλ‘œ μ •μ˜ν•œλ‹€. 

ν•΄λ‹Ή 역할이 ν•„μš”ν•œ 객체가 λ‚˜μ˜¬ λ•Œ λ§ˆλ‹€, ν•΄λ‹Ή ν”„λ‘œν† μ½œμ„ μ±„νƒν•΄μ„œ 역할을 쀄 수 μžˆλ‹€. 

 

ν”„λ‘œν† μ½œμ„ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€ β˜†

->  ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ 것듀을 μ‚¬μš©ν•  수 μžˆλ‹€. 

 

 

πŸ”Ž  3. ν”„λ‘œν† μ½œμ˜ 상속


ν”„λ‘œν† μ½œμ€ 상속 받을 수 μžˆλ‹€. 

ν΄λž˜μŠ€μ™€ λ‹€λ₯΄κ²Œ 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€. 

μ—¬λŸ¬ 개의 상속이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œν† μ½œμ„ 더 μž‘κ³  λͺ…ν™•ν•˜κ²Œ λ‚˜λˆŒ 수 μžˆλ‹€. 

μž¬μ‚¬μš©μ„±λ„ 늘고 ν…ŒμŠ€νŠΈ κ°€λŠ₯성도 높아진닀. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

πŸ”— Reference