Swift

[Swift] 델리게이트(Delegate) 패턴이란

devharrry 2020. 1. 3. 21:38

델리게이트 패턴이란?

하나의 객체가 모든 일을 처리하는 것이 아니라 어떤 객체가 해야하는 일을 부분적으로 확장해서 대신 처리하는 것을 뜻합니다. 

 

언제 사용해야하는가?

하나의 객체가 해야하는 일이 여러가지일 때 사용하는 것이 적합합니다.

 

그 외 객체간 소통할 수 있는 방법 Notification은 한 객체의 변화를 여러 객체들이 관찰해야하는 경우. 즉, 수신받는 객체가 많을 때 사용합니다.

 

Closure같은 경우에는 콜백 블럭을 받기 위한 목적이 분명할 때. 즉, 내부의 블록을 호출시키는 코드를 읽고 다시 돌아와서 추적할 일이 없는 경우일 때 주로 사용합니다. 

 

사용할 때 주의사항

Delegate 프로퍼티 변수를 약한 참조(weak)를 사용하지 않는다면 Strong Reference Cycle, 즉 메모리 누수가 발생할 수 있습니다. 
이를 방지하기 위해 protocol을 class로 구현하고 약항 참조(weak)를 사용하면 메모리 누수를 방지할 수 있습니다. 

 

예제

해당 저장소에는 간단한 유닛테스트 예시도 함께 작성되어 있습니다.

 

https://github.com/gwangyonglee/DelegatePatternExample

 

gwangyonglee/DelegatePatternExample

A Delegate Pattern Example With Unit Tests. Contribute to gwangyonglee/DelegatePatternExample development by creating an account on GitHub.

github.com

 

Mock Delegate 변수 중 valueChangedCallCount 용도는 Mock을 작성할 때 가장 많이 사용하는 패턴 중 메서드가 호출되었다는 것을 기록하기 위해 Boolean 값을 많이 사용합니다. 

 

하지만 해당 메서드가 여러 번 호출될 수 있는 문제가 있고, Boolean 대신 Integer로 변경하여 해당 메서드가 몇번 호출되었는지를 테스트하는 것이 효율적 입니다.