델리게이트 패턴이란?
하나의 객체가 모든 일을 처리하는 것이 아니라 어떤 객체가 해야하는 일을 부분적으로 확장해서 대신 처리하는 것을 뜻합니다.
언제 사용해야하는가?
하나의 객체가 해야하는 일이 여러가지일 때 사용하는 것이 적합합니다.
그 외 객체간 소통할 수 있는 방법 Notification은 한 객체의 변화를 여러 객체들이 관찰해야하는 경우. 즉, 수신받는 객체가 많을 때 사용합니다.
Closure같은 경우에는 콜백 블럭을 받기 위한 목적이 분명할 때. 즉, 내부의 블록을 호출시키는 코드를 읽고 다시 돌아와서 추적할 일이 없는 경우일 때 주로 사용합니다.
사용할 때 주의사항
Delegate 프로퍼티 변수를 약한 참조(weak)를 사용하지 않는다면 Strong Reference Cycle, 즉 메모리 누수가 발생할 수 있습니다.
이를 방지하기 위해 protocol을 class로 구현하고 약항 참조(weak)를 사용하면 메모리 누수를 방지할 수 있습니다.
예제
해당 저장소에는 간단한 유닛테스트 예시도 함께 작성되어 있습니다.
https://github.com/gwangyonglee/DelegatePatternExample
Mock Delegate 변수 중 valueChangedCallCount 용도는 Mock을 작성할 때 가장 많이 사용하는 패턴 중 메서드가 호출되었다는 것을 기록하기 위해 Boolean 값을 많이 사용합니다.
하지만 해당 메서드가 여러 번 호출될 수 있는 문제가 있고, Boolean 대신 Integer로 변경하여 해당 메서드가 몇번 호출되었는지를 테스트하는 것이 효율적 입니다.
'Swift' 카테고리의 다른 글
[Swift] Extension(확장)으로 코드 가독성 올리기 (0) | 2020.01.05 |
---|---|
[Swift] 구조체란 무엇인가? (0) | 2020.01.03 |
[Swift] 타입메소드, 인스턴스 메소드란 (0) | 2020.01.03 |
[Swift] 노티피케이션 센터와 노티피케이션 (0) | 2018.09.16 |
[Swift] DispatchQueue란? (0) | 2018.09.14 |