이 포스팅은 iOS BoostCourse 시리즈 23 편 중 11 번째 글 입니다.

  • Part 1 - 01: Asset, App thinning
  • Part 2 - 02: Foundation, UIKit
  • Part 3 - 03: Auto Layout
  • Part 4 - 04: View 체계
  • Part 5 - 05: 디자인 패턴
  • Part 6 - 06: MVC
  • Part 7 - 07: Apple Development Documents
  • Part 8 - 08: Human Interface Guidelines
  • Part 9 - 09: 화면 전환
  • Part 10 - 10: 뷰의 상태 변화 감지
  • Part 11 - This Post
  • Part 12 - 12: Singleton
  • Part 13 - 13: Target-Action
  • Part 14 - 14: Gesture Recognizer
  • Part 15 - 15: TableView
  • Part 16 - 16: Segue
  • Part 17 - 17: Json 다루기
  • Part 18 - 18: PhotoKit
  • Part 19 - 19: 동시성, 비동기, 병렬 프로그래밍
  • Part 20 - 20: OperationQueue
  • Part 21 - 21: SchrollView
  • Part 22 - 22: Naviagtion item, Bar button item
  • Part 23 - 23: CollectionView
▼ 목록 보기

목차

▼ 내리기

Delegation

  • 위임, 대리
  • 하나의 객체가 다른 객체를 대신해 동작, 조정하는 기능 제공
  • Foundation, UIKit, AppKit, Cocoa Touch 등 프레임워크에서 광범위하게 활용
  • 주로 프레임워크 객체가 위임을 요청 (야, 가져가서 니가 구현해)
  • 커스텀 (프로그래머가 작성하는) 컨트롤러 객체가 위임받아 특정 이벤트에 대한 기능을 구현함

예시로 UITextFieldDelegate를 한번 보자.

// 대리자에게 특정 텍스트 필드의 문구를 편집해도 되는지 묻는 메서드
func textFieldShouldBeginEditing(UITextField)
	
// 대리자에게 특정 텍스트 필드의 문구가 편집되고 있음을 알리는 메서드
func textFieldDidBeginEditing(UITextField)

// 특정 텍스트 필드의 문구를 삭제하려고 할 때 대리자를 호출하는 메서드
func textFieldShouldClear(UITextField)

// 특정 텍스트 필드의 `Return` 키가 눌렸을 때 대리자를 호출하는 메서드
func textFieldShouldReturn(UITextField)

이 예시를 보면, 델리게이트는 특정 상황에 대리자(프로그래머가 작성하는 컨트롤러 객체)에 메시지를 전달하고, 적절한 기능을 구현하기 위한 목적으로 사용됨

imageDelegate Pattern

Data Source

  • 델리게이트와 매우 비슷한 역할을 한다.
  • 델리게이트가 사용자 인터페이스 제어에 관련된 권한을 위임받는 반면
  • 데이터 소스는 데이터를 제어하는 기능을 위임 받음
  • 많이 사용되는 데이터 소스에는 UITableViewDataSourceUICollectionViewDataSource가 있다.

Protocol

  • 코코아 터치에서 프로토콜을 사용하여 델리게이션과 데이터소스를 구현할 수 있음
  • 객체간 소통을 위한 강력한 통신 규약
  • 데이터나 메시지를 전달할 때 사용함
  • 프로토콜은 특별한 상황에 대한 역할을 정의하고 제시
  • 하지만 세부기능은 구현하지 않음 (Interface)
  • 구조체, 클래스, 열거형에서 프로토콜을 채택하고 특정 기능을 수행하기 위한 사항을 구현할 수 있음

Reference