1. 델리게이트 패턴이란?
델리게이트 패턴이란 어떠한 객체A 에서 하고싶은 일을 다른 객체B 에게 대신 처리하게 만드는 패턴이다
*Delegate: 위임자, 대신 수행하는 사람, 대리자
프로토콜 타입으로 지정했기 때문에 클래스 내부를 수정하지 않고 위임자만 교체해 주면 되며 수정에 용이한 구조가 장점이다
2. 사용 방법과 예제
1️⃣ 바리스타 프로토콜 생성
클래스가 채택할 프로토콜(Barista)임을 명시하고 이 프로토콜을 만족하는 클래스는 커피를 만드는 책임(makeCoffee)을 가짐
import Foundation
//클래스가 채택할 프로토콜임을 명시
protocol Barista: AnyObject {
func makeCoffee() -> String
}
2️⃣ Class 생성
커피를 만들 CoffeeShop 클래스를 생성하고 커피를 제공할 serveCoffee 메서드를 생성한다
Class 자체가 커피를 만드는 것이 아닌 위임자 Barista를 만들어서 대리자(Delegate)로서 사용한다
class CoffeeShop {
weak var delegate: Barista?
init() {}
func serveCoffee() {
guard let coffee = delegate?.makeCoffee() else { return }
print("주문하신 \(coffee) 나왔습니다.")
}
}
3️⃣ 위임자 Barista 생성
CoffeeShop 클래스를 사용하기 위해 인스턴스 coffeeShop 생성 후 Barista 프로토콜을 채택한 Adam 클래스를 만든다
한 줄일 경우 return 생략이 가능하다
let coffeeShop = CoffeeShop()
class Adam: Barista {
func makeCoffee() -> String {
"아이스 아메리카노"
}
}
4️⃣ delegate 채택
adam 인스턴스를 생성하여 coffeeshop의 위임자(delegate)를 adam 으로 채택
let adam = Adam()
coffeeShop.delegate = adam
coffeeShop.serveCoffee()
해당 예제처럼 프로토콜 타입에 의존할 경우 어떠한 클래스가 역할을 수행할지는 중요하지 않다
역할을 수행할 위임자만 결정해 주면 되며, 해당 구조는 수정에 용이한 장점을 가지고 있다
이 철학은 객체지향 5대 원칙 중 의존성 역전 원칙(DIP)와 관련이 있다
5️⃣ 또 다른 위임자 생성
기존 클래스의 수정 없이 또 다른 클래스가 역할을 수행할 수도 있다
class Eve: Barista {
func makeCoffee() -> String {
"카페라뗴"
}
}
let eve = Eve()
coffeeShop.delegate = eve
coffeeShop.serveCoffee()
'🍎 Swift > iOS 학습 노트' 카테고리의 다른 글
[Swift🍎] TabBarController로 탭바 구성하기 (0) | 2024.08.10 |
---|---|
[강의노트👩🏻💻] 스위프트 아키텍처 - MVC와 MVVM (0) | 2024.08.02 |
[강의노트👩🏻💻] 프로세스와 스레드 / 동기 비동기 / Dispatch Queue (0) | 2024.08.01 |
[강의노트👩🏻💻] Xcode Instruments로 메모리릭 잡아내기 (0) | 2024.07.30 |
[강의노트👩🏻💻] URLSession (0) | 2024.07.30 |