κ°λ¨ν μ±μ λ§λλ 곡λΆλ₯Ό νλ μ€μ "λΈλ¦¬κ²μ΄νΈ ν¨ν΄"μ΄ μ§μμ μΌλ‘ μΈκΈλλ©° μ¬μ©νκΈΈλ μμΈν μ§κ³ λμ΄κ°κ³ μΆμ΄ κΈμ μ°κ² λμλ€.
Delegate Pattern
λΈλ¦¬κ²μ΄νΈ ν¨ν΄μ iOSμμ μ¬μ©λλ μ¬λ¬ λμμΈ ν¨ν΄ μ€ νλμ΄λ€. κ°μ²΄λ€ μ¬μ΄μ μνΈμμ©μ ꡬννλ λ°©λ²μ΄λ€.
delegateλ μ¬μ μ μλ―Έλ‘ 'λ리μ', 'μμμ' λΌλ μλ―Έλ₯Ό κ°μ§κ³ μλ€.
λΈλ¦¬κ²μ΄νΈ ν¨ν΄μ μ¬μ©νλ©΄ νλμ κ°μ²΄κ° λ€λ₯Έ κ°μ²΄μκ² μμ μ μΌλΆ κΈ°λ₯μ λμ μ²λ¦¬νλλ‘ μμ(delegate)ν μ μλ€.
μ½κ² λ§ν΄, Aκ° Bμκ² νΉμ μ΄λ²€νΈκ° λ°μνλ©΄ ν΄λΉ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ μ± μμ Bμκ² μμνλ κ²μ μλ―Ένλ€.
Delegate Pattern μμ
μ΄ν΄κ° μ λμ§ μλλ€λ©΄ μ€μνλ‘ μλ₯Ό λ€μ΄λ³΄λ©΄ λλ€.
μννΈμ¨μ΄νκ³Όλ MTλ₯Ό κ°λ€.
ννμ₯μ AλΆμμκ² λ ν¬λ μ΄μ κ²μ μ€λΉλ₯Ό μμνκ³ BλΆμμκ²λ μ₯보기λ₯Ό μμνκ³ CλΆμμκ²λ μ°¨λλμ¬μ νλΉλ₯Ό μμνλ€.
DelegateProtocol : λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½ μ μ
protocol MTDelegate: class {
func prepareRecreationGames() //λ ν¬λ μ΄μ
μ€λΉ
func doShopping() //μ₯보기
func rentVehicles_And_Fees() //μ°¨λλμ¬, νλΉ
}
A_Department : A λΆμκ° λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½μ ꡬννλ ν΄λμ€ μ μ
class A_Department: MTDelegate {
func prepareRecreationGames() {
print("A λΆμκ° λ ν¬λ μ΄μ
κ²μμ μ€λΉν©λλ€.")
}
func doShopping() {
// A λΆμλ λ ν¬λ μ΄μ
κ²μ μ€λΉμλ§ κ΄μ¬νλ―λ‘ μ΄ λ©μλλ ꡬννμ§ μμ
}
func rentVehicles_And_Fees() {
// A λΆμλ λ ν¬λ μ΄μ
κ²μ μ€λΉμλ§ κ΄μ¬νλ―λ‘ μ΄ λ©μλλ ꡬννμ§ μμ
}
}
B_Department : B λΆμκ° λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½μ ꡬννλ ν΄λμ€ μ μ
class B_Department: MTDelegate {
func prepareRecreationGames() {
// B λΆμλ λ ν¬λ μ΄μ
κ²μ μ€λΉμλ§ κ΄μ¬νλ―λ‘ μ΄ λ©μλλ ꡬννμ§ μμ
}
func doShopping() {
print("B λΆμκ° μ₯보기λ₯Ό μ€λΉν©λλ€.")
}
func rentVehicles_And_Fees() {
// B λΆμλ μ₯보기μλ§ κ΄μ¬νλ―λ‘ μ΄ λ©μλλ ꡬννμ§ μμ
}
}
C_Department : C λΆμκ° λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½μ ꡬννλ ν΄λμ€ μ μ
class C_Department: MTDelegate {
func prepareRecreationGames() {
// C λΆμλ λ ν¬λ μ΄μ
κ²μ μ€λΉμλ§ κ΄μ¬νλ―λ‘ μ΄ λ©μλλ ꡬννμ§ μμ
}
func doShopping() {
// C λΆμλ μ₯보기μλ§ κ΄μ¬νλ―λ‘ μ΄ λ©μλλ ꡬννμ§ μμ
}
func rentVehicles_And_Fees() {
print("C λΆμκ° μ°¨λ λμ¬μ νλΉ κ±·κΈ°λ₯Ό μ€λΉν©λλ€.")
}
}
MTOrganizer : ννμ₯μ΄ MT μ€λΉλ₯Ό μμνλ ν΄λμ€ μ μ
class MTOrganizer {
weak var delegateA: MTDelegate?
weak var delegateB: MTDelegate?
weak var delegateC: MTDelegate?
func organizeMT() {
delegateA?.prepareRecreationGames()
delegateB?.doShopping()
delegateC?.rentVehicles_And_Fees()
}
}
μ½λ μ€λͺ
μμ μ½λμμλ λΈλ¦¬κ²μ΄νΈ ν¨ν΄μ νμ©νμ¬ ννμ₯(MTOrganizer)μ΄ MT μ€λΉλ₯Ό λ€λ₯Έ λΆμλ€(A, B, C)μκ² μμνλ€.
MTDelegate νλ‘ν μ½μ μ μνμ¬ MT μ€λΉλ₯Ό μμλ°μ λΆμλ€μ΄ ꡬννλλ‘ νλ€.
κ° λΆμ ν΄λμ€(A_Department, B_Department, C_Department)λ λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½μ ꡬννκ³ MTOrganizerμμorganizeMT() λ©μλλ₯Ό νΈμΆνμ¬ MT μ€λΉλ₯Ό μμνλ€.
μ΄λ₯Ό ν΅ν΄ ννμ₯μ MT μ€λΉμ μ§μ μ μΌλ‘ κ΄μ¬νμ§ μκ³ , κ° λΆμλ€μ΄ ν΄λΉ μν μ μννλλ‘ κ΅¬νν μ μλ€.
Delegate Pattern ꡬμ±μμ
λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½(Delegate Protocol)
λΈλ¦¬κ²μ΄νΈ ν¨ν΄μ μ¬μ©νκΈ° μν΄μλ λ¨Όμ λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½μ μ μν΄μΌ νλ€. λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½μ λΈλ¦¬κ²μ΄νΈ κ°μ²΄κ° λ°λμ ꡬνν΄μΌ νλ λ©μλλ€μ μ μνλ€.
λΈλ¦¬κ²μ΄νΈ(Delegate)
λΈλ¦¬κ²μ΄νΈλ λΈλ¦¬κ²μ΄νΈ νλ‘ν μ½μ μ±ννκ³ ν΄λΉ νλ‘ν μ½μ μ μλ λ©μλλ€μ ꡬννλ κ°μ²΄μ΄λ€. μΌλ°μ μΌλ‘ λΈλ¦¬κ²μ΄νΈλ λ€λ₯Έ κ°μ²΄μ μ΄λ²€νΈμ λν μλ΅μΌλ‘ λμνλ€.
λΈλ¦¬κ²μ΄νΈλ₯Ό μμ λ°λ κ°μ²΄(Delegate)
λΈλ¦¬κ²μ΄νΈλ₯Ό μμ λ°λ κ°μ²΄λ ν΄λΉ κ°μ²΄μμ λ°μνλ μ΄λ²€νΈλ₯Ό μ²λ¦¬ν λΈλ¦¬κ²μ΄νΈλ₯Ό κ°μ§κ³ μλ€. μ΄ κ°μ²΄λ νΉμ μ΄λ²€νΈκ° λ°μν λ λΈλ¦¬κ²μ΄νΈμκ² ν΄λΉ μ΄λ²€νΈλ₯Ό μλ¦¬κ³ , λΈλ¦¬κ²μ΄νΈκ° μ μ ν μ²λ¦¬νλλ‘ νλ€.
'π± Mobile > iOS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS - Swift] is, as νμ μΊμ€ν (μ μΊμ€ν , λ€μ΄ μΊμ€ν ) (0) | 2023.08.02 |
---|---|
[iOS - Swift] extension(νμ₯) μ λν΄ (0) | 2023.07.31 |
iOS - 2023λ μ΅μ iOS κ°λ° λν₯κ³Ό μ λ°μ΄νΈ (feat. WWDC 2023) (0) | 2023.07.24 |
iOS - MVC(Model-View-Controller) ν¨ν΄μ΄λ 무μμΌκΉ? (0) | 2023.07.20 |
iOS - UIKit vs SwiftUI μ λν΄μ (2) (0) | 2023.07.18 |