[Swift] Delegate Pattern을 사용해보자

장수빈·2024년 7월 5일
0

UIKit

목록 보기
12/16

Delegate pattern이란?

사전에는 "위임하다" 라는 뜻을 가지고 있다.

일단 위임하다 라는것만 알고 코드를 보면서 알아보자.

import Foundation

protocol AdvancedLifeSupport {
    func performCPR()
}

class EmergencyCallHandler {
    var delegate: AdvancedLifeSupport?
    
    func assessSituation() {
        print("Can you tell me what happened")
    }
    
    func medicalEmergency() {
        delegate?.performCPR()
    }
}

struct Paramedic: AdvancedLifeSupport {
    func performCPR() {
        print("The paramedic does chest compressions, per 30 sec")
    }
    
    init(handler: EmergencyCallHandler) {
        handler.delegate = self
    }
}

let emilio = EmergencyCallHandler()
let pete = Paramedic(handler: emilio)

emilio.assessSituation()
emilio.medicalEmergency()

AdvancedLifeSupport라는 프로토콜을 선언해 준다.

EmergencyCallHandlerdelegate(위임자)를 선언해준다.

Paramedic은 프로토콜 안에 있는 performCPR을 구현해주고

EmergencyCallHandlerdelegate를 자기 자신 Paramedicself로 할당해준다.

후에 EmergencyCallHandlerdelegate를 통해 performCPR()을 실행하면

메서드를 호출하는것은 EmergencyCallHandler이지만 실행은 Paramedic에서 하게 된다.

delegate를 weak var로 선언하는 이유는 강한 참조를 피하기 위함!

profile
iOS 공부 이모저모 낙서장

0개의 댓글