[Design Pattern] Delegate Pattern

김명현·2024년 6월 26일
0
post-thumbnail

1. 정의

Delegate Pattern은 디자인패턴 중 하나이다.
Delegate 단어 자체로 보면 위임하다 라는 뜻을 가지고있습니다.
여기서는 위임자라 생각하면 될 것같습니다.
즉 위임자를 갖고 있는 객체가 다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴입니다.
객체 간 데이터를 전달하는 데에 주로 사용됩니다.


2. 간단 예시 & 실적용 예시

2-1. 간단예시

먼저 흐름을 설명하기위해 간단한 예시를 먼저 보여드리겠습니다.

우리는 전쟁을 준비하려합니다.
전쟁을 하기 위해서는 무기방어구가 필요합니다.
전쟁 지휘관은 병사들에게 무기와 방어구를 준비할 것을 명령(위임)합니다.
병사들은 그 명령을 따르고, 각자 맡은 무기와 방어구를 준비한다.

title

PrepareWar 프로토콜에는 전쟁을 준비하기 위해 필요한 일들을 작성합니다.
전쟁을 준비하기 위해 무기와 방어구를 준비할 것입니다.

title

전쟁 지휘관의 역할을 할 Commander 클래스에는 명령을 위임할 delegate 변수와 명령을 시키는 command( ) 함수를 만들어줍니다.

title

title

명령을 시킬 두 명의 병사를 만들었습니다.
두 클래스명 뒤에 프로토콜을 명시하여 PrepareWar 프로토콜을 준수하도록 합니다.
이니셜라이저 부분에 중요한 코드가 있는데 commander.delegate = self
이 코드로 지휘자가 시키는 명령을 병사 자신이 처리하겠다고 명시하는 것입니다.
즉, 위임자(commander)의 delegate 변수를 자신으로 설정함으로써, 자신이 위임자의 일을 대신 처리하겠다는 의미입니다.
위임자의 delegate변수와 자신을 연결해주 주는 코드입니다.

title

title

지휘관과 두명의 병사를 객체로 생성하였습니다. 여기서 중요한 점은 지휘관은 전쟁 준비를 시키기만 하였고 어떤 무기,방어구를 준비할 지는 명시하지 않았습니다.
어떤 것들을 준비할 지는 명령을 받은 병사들이 각자의 방법으로 처리하였습니다.

2-2. 실적용 예시

현재 진행중인 프로젝트에서 Delegate Pattern을 적용한 부분을 설명하겠습니다.

title

회원가입 과정에서 학교를 검색하고 선택하는 뷰입니다. 여기서 학교를 검색하고 선택하기 전까진 "다음으로" 버튼이 비활성화 되어 있습니다.


title
선택한 후에는 활성화된 것을 볼 수 있습니다. 이 부분을 Delegate Pattern을 적용해서 구현했습니다.

SignUpViewControllerSearchSchoolCollectionViewCell 2가지 파일에서 구현하였습니다.


SearchSchoolCollectionViewCell
title

우선 protocol로 SearchSchoolCollectionViewDelegate를 만들고 버튼을 업데이트 시키는 함수를 구현해주도록 작성해줍니다.

title

title

delegate 변수를 만들고 setProperties 함수에서 self.delegate = delegate대리자로 위임합니다.

title

UITableViewDelegate에서 didSelectRowAt에서 행을 선택했을때
delegate?.updateNextButtonState(true) 이 부분에서 true 값을 delegate로 넘겨줍니다.


SignUpViewController

title

cell.setProperties(delegate: self, viewModel: viewModel)
이 부분에서 자신을 대리자로 위임 받습니다.

title

넘겨받은 state받을 이용해 버튼의 상태를 비활성화,활성화 합니다.

profile
iOS개발자

0개의 댓글