티스토리 뷰
Delegate 패턴
객체 지향 프로그래밍에서 많이 사용되는 디자인 패턴 중 하나입니다.
객체 간의 상호작용을 할 때 사용하곤 합니다.
작업을 위임하는 객체와 대리하는 객체(실제로 작업을 수행하는)로 구성됩니다.
대리자 객체는 위임자 객체에서 호출이 가능한 메서드를 구현합니다.
이를 호출하는 위임자 객체는 대리자 객체의 메소드를 대신 호출합니다.
객체간 결합도를 낮출 수 있고, 유연하고, 확장 가능한 코드를 작성할 수 있게 됩니다.
Swift에서 Delegate 패턴을 사용하는 방법
1. 프로토콜 정의하기
protocol SomeDelegate: AnyObject {
func someMethod()
}
2. 위임자 객체 생성하기
class SomeClass {
var delegate: SomeDelegate?
func someMethod() {
delegate?.someMethod()
}
}
3. 대리자 객체 생성하기
class delegateClass: SomeDelegate {
init(someClass: SomeClass) {
someClass.delegate = self
}
func someMethod() {
print("실제 해야할 일들을 수행합니다")
}
}
4. 사용하기
let someClass = SomeClass()
let delegateClass = DelegateClass(someClass: someClass)
someClass.someMethod() // 실제 해야할 일들을 수행합니다
혹은 다음과 같이 사용할 수도 있습니다.
class DelegateClass: SomeDelegate {
func someMethod() {
print("실제 해야할 일들을 수행합니다")
}
}
let someClass = SomeClass()
let delegateClass = DelegateClass()
someClass.delegate = delegateClass
someClass.someMethod() // 실제 해야할 일들을 수행합니다
Delegate 패턴의 장단점
장점
- 객체간의 의존성을 낮출 수 있음
- 코드의 재사용성과 유지보수성 향상
단점
- 코드가 복잡해질 수 있음
- 런타임 오버헤드 발생할 수 있음(미미함)
고려해야 할 사항
- 정말 Delegate 패턴이 적합한지 여부를 판단할 것
- 프로토콜을 최대한 단순하게 정의할 것
'programming > Swift' 카테고리의 다른 글
[Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(2) (0) | 2023.05.05 |
---|---|
[Swift/iOS/디자인패턴] 퍼사드 Facade 패턴 (0) | 2023.05.03 |
[Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(1) (0) | 2023.04.28 |
[Swift/iOS] In-Out Parameters From 공식문서 (0) | 2023.04.27 |
[Swift/iOS] 캡쳐리스트 Capture List , 탈출 클로저 escaping Closure, 자동클로저 AutoClosure from 공식문서 (0) | 2023.04.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 캡쳐리스트
- 클로저표현
- identity Token
- core data
- context
- CoreData
- object
- unowned
- 회원가입
- 강한참조순환
- Delegate 패턴
- 토큰저장
- ios
- inout 파라미터 메모리 충돌
- 클로저
- 메모리 안정성
- SWIFT
- escaping closrue
- autoclosure
- 클로저 강한 참조
- ASAuthorizationAppleIDCredential
- Persistent Container
- 클로저 축약
- Core Data Stack
- 디자인패턴
- 자동클로저
- 강한 참조 순환
- authorizationCode
- weak
- Entity
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함