Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- iOS 개발 오류
- Apple Developer Academy @ POSTECH
- SWIFT
- ObservedObject
- Swift 기능
- 데이터베이스
- OS
- global soop
- 앱 비교 프로젝트
- 애플 디벨로퍼 아카데미 후기
- 네이버 치지직
- ObservableObject
- Swift 디자인패턴
- 치지직
- 소프트웨어분석및설계
- 운영체제
- 네이버 부스트캠프
- sqoop
- 애플 디벨로퍼 아카데미 21주차 회고
- useReducer
- 애플 아카데미 후기
- react
- swift문법
- Swift 문법
- 제앱소
- 숭실대
- 데이터베이스 공부
- apple developer academy 후기
- StateObject
- 애플 디벨로퍼 아카데미
Archives
- Today
- Total
사과하는 제라스
[Swift 디자인패턴] delegate 패턴을 알아보자 본문
목차
728x90
반응형
delegate...
delegate는 위임자라는 뜻이다. 어떤 것에 대한 대리자, 즉, 수행할 사람이란 거다. 밑에 코드를 한번 보자.
import UIKit
// 대리자에 대한 프로토콜
protocol RemoteControlDelegate {
func channelUp()
func channelDown()
}
// 리모콘 클래스(유저와 직접 대면함)
class RemoteControl {
var delegate: RemoteControlDelegate? //사실상 여기에는 내가 이 리모콘으로 무엇을 작동할지 적는 것임.
func doSomething() {
print("리모콘의 조작이 일어나고 있음")
}
func channelUp() { // 어떤 기기가 리모콘에 의해 작동되는지 몰라도 됨
delegate?.channelUp()
}
func channelDown() { // 어떤 기기가 리모콘에 의해 작동되는지 몰라도 됨
delegate?.channelDown()
}
}
// TV 클래스(리모콘과 커뮤니케이션하여 동작을 함.)
class TV: RemoteControlDelegate {
func channelUp() {
print("TV의 채널이 올라간다.")
}
func channelDown() {
print("TV의 채널이 내려간다.")
}
}
let remote = RemoteControl()
let samsungTV = TV()
remote.delegate = samsungTV
remote.channelUp() // 리모콘 실행 ====> delegate?.channelUp()
remote.channelDown() // 리모콘 실행 ====> delegate?.channelDown()
// SmartPhone 클래스(리모콘과 커뮤니케이션하여 동작을 함.)
class SmartPhone: RemoteControlDelegate {
init(remote: RemoteControl) {
remote.delegate = self // remote.delegate = smartPhone
}
func channelUp() {
print("스마트폰의 채널이 올라간다.")
}
func channelDown() {
print("스마트폰의 채널이 내려간다.")
}
}
let smartPhone = SmartPhone(remote: remote)
remote.channelUp() // 리모콘 실행 ====> delegate?.channelUp()
remote.channelDown() // 리모콘 실행 ====> delegate?.channelDown()
지금 클래스는 3개가 있다. RemoteControl, TV, SmartPhone.
이들의 관계는 이름부터 명시적이다. RemoteControl로 TV나 SmartPhone에 대한 동작을 제어하는 것이다. 즉 우리는 어떤 RemoteControl에 delegate(대표될 것)를 TV나 SmartPhone으로 지정해두면 그 RemoteControl 객체는 delegate에 지정된 것에 대한 것으로 적용이 되고 우리는 RemoteControl을 이용해서만 동작을 하면 되기에 RemoteControlDelegate 프로토콜을 채택한 하나의 객체만 지정해주면 된다.
일단은 이렇게 대충 간단한 예시만 공부를 했는데 아마 좀 더 알아가야 할 요소들이 있지 않을까 싶다. 그래도 이런 형태의 패턴이구나 하고 이해할 수 있어서 다행이다.
728x90
반응형
'제라스의 iOS 공부 > Swift 디자인 패턴' 카테고리의 다른 글
[Swift 디자인패턴] Singleton 패턴 (0) | 2023.08.19 |
---|---|
[Swift 디자인패턴] Builder 패턴 (0) | 2023.08.18 |