본문 바로가기
iOS

[iOS] Delegate & Protocol

by SiO2whocode 2025. 3. 26.

Delegate & Protocol pattern

delegate와 protocol 패턴은 one-to-one communication pattern이다.

여기서 one to one 이 의미하는 건 흔한 예시로는 뷰와 뷰 사이의 통신을 말함.

⇒ 뷰 사이의 통신을 delegate와 protocol로 구현할 수 있다.

 

 

What is Delegate?

Delegate: 위임하다

delegate pattern은 A객체가 특정 task를 B객체에게 위임(delegate)할 때 사용한다.

 

여기에서 등장하는 비유가 BossIntern의 관계다.

delegate 패턴에서 위임받는 객체 입장(Intern)에서는 무슨 일을, 언제할지 명령이 떨어지기를 기다리고 있는 것.

위임하는 객체 입장(Boss)에서는 언제 그 일을 시킬지 명령하는 것이다.

 

 

Protocol

프로토콜은 명령들의 리스트 즉 job description에 비유되는데, delegate가 할일이 무엇인지 나열해둔 타입이다.

세부적인 절차를 알려주는 게 아니라 해야할 일이 무엇인지 제목 정도 알려준다.

(Java의 인터페이스 같은 것)

 

 

1️⃣ delegate가 무슨 일을 해야하는지 protocol로 정의하고 나서,

Boss(뷰)는 job의 position이 어딘지 명시해야하는데, 이걸

2️⃣ Boss(뷰, 클래스)에서 property로 delegate를 갖는 것으로 한다. (job position opening에 비유)

이럼으로써 내가 이 delegate가 된다(맡는다) = Boss뷰와 연결된다.를 의미하게 됨.

 

3️⃣ 그러면 이제 인턴(뷰)가 해당 delegate job에 지원해야하는데

  1. 우선 delegate protocol을 채택한다.
  2. delegate protocol이 요구하는 요구사항(method, property)들을 구현함으로써 해당 프로토콜을 준수한다. (나 그 일 할줄 알아. 라고 하는 거랑 같음 = 약간 지원서 쓰기 같은)
  3. Boss뷰의 delegate property에 ‘나(self)’를 전달,할당한다. (job 지원 완료)

4️⃣ 마지막으로 Boss뷰가 Intern뷰에 필요할 때 명령을 내리면 된다. (그 일 지금 해라!)

= Boss뷰에서 delegate의 method 호출

 

 

Delegate와 Protocol을 사용해서 인스턴스간, 뷰간의 일대일 통신을 하는 방법 요약

1️⃣ Boss 클래스가 위임할 일들을 delegate protocol에 정의한다. (Job description 작성)

2️⃣ Boss 클래스의 property로 delegate protocol을 갖는다. (Job position opening)

3️⃣ Intern 클래스가 Boss 클래스의 delegate protocol을 채택하여 준수한 후, 본인을 Boss 클래스의 delegate property에 할당한다. (Job 지원)

4️⃣ Boss 클래스 내부에서 delegate의 method, property 등을 호출 or 사용하는 것으로 Intern 클래스에게 명령을 준다. (본격 일 시키기)

 

⇒ 일대일 패턴의 통신을 구현하는 한가지 방법

 

 

https://www.youtube.com/watch?v=XTAziR-tY-A&t=6656s

 

728x90