Delegate Pattern (Swift)

이득령·2024년 8월 3일

패턴

목록 보기
1/2

Delegate Pattern(딜리게이트 패턴)

Delegate Pattern이란 class, struct 가 위임해 기능을 수행하는 방식입니다.

솔직히 전 이해가 잘 안됩니다.

코드를 먼저 볼게요.

//부품 정의
protocol Parts: AnyObject {
    func makePart() -> String
}

//자동차 공장 정의
class Factory {
    weak var delegate: Parts?
    init () {}
    
    func partsOrder() {
        guard let part = delegate?.makePart() else { return }
        print("주문했던 \(part)이 도착했습니다.")
    }
}
//부품 생성 정의

class Engine: Parts {
    func makePart() -> String {
        "engine"
    }
}

let factory = Factory()
let engine = Engine()

factory.delegate = engine

factory.partsOrder() 

여기서 중요한 부분은 Factory 클래스를 수정하지 않고도 print 를 수정할 수 있는 장점이 있습니다

저는 자동차 공장이 돌아가는 시나리오로 코드를 작성해봤습니다.

위 사진을 보면 이해가 조금 쉬울것 같습니다.

  1. 필요 부품 정의

    먼저 주문을 하기전에 필요한 부품이 뭔지를 알아야 주문을 할 수 있기 때문에 정의를 해줍니다.

    코드에서는 makePart() 함수는 String 타입을 반환하게 설계되었습니다.

  2. 부품 주문

    부품 주문 부분에서는 필요한 부품이 뭔지 확인했고 makePart 반환되는 String 사용합니다.

  3. 부품 제작

    부품 제작에서는 정의한 프로토콜에 맞게 makePart 함수를 사용해 리턴할 값을 저장해줍니다.

  4. 부품 전달

    전달에서는 delegate 를 위임합니다

Delegate 패턴을 사용하면 매인 클래스의 수정을 최소화 하여 코드를 추가하고 수정이 용이하다고 생각을합니다.

profile
프로그래머 아님

0개의 댓글