티스토리 뷰

Swift/디자인패턴

Delegate Pattern (Swift)

Clover(린생) 2019. 6. 5. 21:03

안녕하세요 린생입니다.

 

오늘은 디자인 패턴 중 Delegate 패턴의 대하여 알아보겠습니다.

 

iOS를 공부하시는 분 들이라면 delegate 패턴은 익숙하고 많이 들어 보았을 것 같습니다.

 

먼저 delegate의 사전적인 의미를 알아보면 

 

 

'위임하다.’ 로 해석을 할 수 있습니다.

 

정말 사전 적 의미와 동일하게 delegate 패턴은 위임하는 패턴입니다.

 

1. Delegate pattern을 사용하는 이유

 

애플에서는 delegate 패턴을 매우 많이 볼 수 있습니다. 

Delegate을 사용하는 이유는 Controller에게 역할을 위임하기 위해서 입니다.

 

이게 무슨 말이냐? 이런 생각을 할 수 있을 거 같습니다.

 

apple에서는 MVC 패턴을 권장하고 있습니다. 

 

MVC 패턴은 Model - View - Controller 로 구성을 하여 개발하는 아키패턴 패턴입니다.

 

출처: https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

 

이 패턴에서 View에서 사용자가 action을 하면 Controller에게 알려 줄 필요가 있습니다.

 

이러한 상항에서 View의 역할은 오직 사용자의 action을 알려주는 역할만 하고 그 action은 어떻게 처리 할 지는 Controller에게 위임하는 것입니다.

 

2. Delegate Pattern 예시

 

간단한 예시를 만들어 보겠습니다.

 

 

위의 그림에서 MainViewController가 있고 MainView가 있습니다.

 

MainView는 x축 100, y축 100, 사이즈 100을 가지고 있습니다. 

 

MainView에서 버튼이 누린 경우 MainViewController에게 어떻게 알려 줄 수 있을까요?

 

 

이런 방법이 있을 거 같습니다. 

 

하지만 이 방법은 좋은 방법이 아닙니다.

 

그 이유는 View에서 버튼 action의 대해 클릭이라는 행동을 하고 있기 때문입니다. 

view는 유저에게 가장 가까운 위치에 있어 데이터와 정보 보여주는 역할과 이벤트를 받는 역할만 해야 합니다.

 

그러면 어떻게 하면 View에서 Controller에게 알려 줄 수 있을까요? 이런 상황에서 delegate 패턴을 사용하는 것입니다.

 

 

먼저 Protocol을 만들고 그 protocol을 가지고 있는 변수를 만들어줍니다.

 

그리고 protocol에서 button action을 받을 함수를 선언합니다.

 

그리고 controller는 아래와 같이 작성합니다.

 

 

이렇게 만들고 buttonTapped이라는 함수에서 이벤트를 처리 하는 것입니다.

 

이렇게 하여 Controller가 이벤트 처리 후 다시 view에게 알려주는 것입니다.

 

 

이렇게 위에 MVC 아키텍쳐 패턴에 맞게 View가 Controller에게 이벤트를 알려주고 Controller는 다시 View에게 update을 하는 형태가 되는 것입니다.

 

'Swift > 디자인패턴' 카테고리의 다른 글

SingleTon Pattern(swift)  (0) 2018.07.06
Builder pattern(swift)  (2) 2018.07.03
Observer Pattern(swift)  (6) 2018.06.08
Factory Pattern(swift)  (3) 2018.05.30
댓글