[iOS/Swift] protocol과 delegate 패턴

chaentopia·2023년 3월 10일
0


delegate를 대충 듣고 대충 알긴하지만 정확히 무슨 일을 하는 것인지 궁금해서 공부해보기로 했다. 동시에 프로토콜에 대해서도 같이 나오길래 대체 무엇인지!! 찾아보았다.

프로토콜, protocol이란?

delegate는 protocol로 구현이 된다. 프로토콜이란 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구 사항의 청사진을 의미한다. 구조체, 클래스, 열거형은 이 프로토콜을 채택해서 기능을 실행하기 위한 프로토콜에 정의된 요구사항을 구현해준다. 일종의 약속이라고할 수 있는데, 어떠한 프로퍼티와 메서드들이 필요하다는 약속을 정의하는 것이다.
여기서 프로토콜은 정의, 선언과 제시만 할 뿐 스스로 기능을 구현하지는 않는다.

protocol 프로토콜이름 {
	// 프로토콜 정의 (프로퍼티 및 메서드 선언)
}

코드는 이렇게 구현된다.

만약 특정 프로토콜을 채택하는 구조체나 클래스, 열거형을 만든다고 한다면

struct Astruct : AProtocol, BProtocol { // 프로토콜 채택
	// 구조체 정의
}

이렇게 프로토콜을 채택해줄 수 있다.

델리게이트 패턴, Delegate Pattern이란?

delegate라는 단어 자체는 대표자, 위임하다 등의 사전적 의미를 갖고 있다. 위임자 및 대리자라고 이해할 수 있겠는데, 자신이 처리할 일을 다른 객체에게 넘긴다는 것이다. 예를 들어서 UITextViewDelegate 프로토콜을 채택하는 ViewController가 있다면, UITextViewDelegate 안에 정의되어 있는 함수를 불러와 내가 하고싶은 일을 구현할 수 있다.
예를 들면 UITextViewDelegate 안에는 textViewDidBeginEditing, textViewDidEndEditing, textViewShouldBeginEditing, textViewShouldEndEditing 등의 함수가 있다.

그리고 ViewController의 viewDidLoad() 안에 ATextView.delegate = self 를 추가해준다면 ATextView라는 이름의 UITextView가 해야할 일을 self, 즉 ViewController 자기 자신에게 위임한다는 뜻이 된다.

delegate pattern은 OOP에서 하나의 객체가 모든 일을 다 처리하는 것이 아니라 그 중 일부는 다른 객체에게 넘기도록 하는 것이라고 할 수 있다.

profile
the pale blue dot

0개의 댓글