λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“± Mobile/iOS

iOS - Delegate Pattern (델리게이트 νŒ¨ν„΄)

κ°„λ‹¨ν•œ 앱을 λ§Œλ“œλŠ” 곡뢀λ₯Ό ν•˜λ˜ 쀑에 "델리게이트 νŒ¨ν„΄"이 μ§€μ†μ μœΌλ‘œ μ–ΈκΈ‰λ˜λ©° μ‚¬μš©ν•˜κΈΈλž˜ μžμ„Ένžˆ 짚고 λ„˜μ–΄κ°€κ³  μ‹Άμ–΄ 글을 μ“°κ²Œ λ˜μ—ˆλ‹€. 

 

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)

델리게이트λ₯Ό μœ„μž„ λ°›λŠ” κ°μ²΄λŠ” ν•΄λ‹Ή κ°μ²΄μ—μ„œ λ°œμƒν•˜λŠ” 이벀트λ₯Ό μ²˜λ¦¬ν•  델리게이트λ₯Ό 가지고 μžˆλ‹€. 이 κ°μ²΄λŠ” νŠΉμ • μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œ λΈλ¦¬κ²Œμ΄νŠΈμ—κ²Œ ν•΄λ‹Ή 이벀트λ₯Ό μ•Œλ¦¬κ³ , λΈλ¦¬κ²Œμ΄νŠΈκ°€ 적절히 μ²˜λ¦¬ν•˜λ„λ‘ ν•œλ‹€.

 

 

728x90