Delegation, DataSource

이하연·2021년 9월 16일
0

Boostcourse

목록 보기
19/20

Delegation

정의

사전적의미 - 대표,사절,위임,대리

Delegation는 사용자 인터페이스 제어에 관련한 권한을 위임받습니다.

특정 상황에 대리자에게 메시지를 전달하고 그에 적절한 응답 받기 위한 목적으로 사용됩니다.

특징

Delegation Design Pattern은 하나의 객체가 다른 객체를 대신해 동작 또는 조정할 수 있는 기능을 제공합니다. 이 패턴은 Foundation, UIKit, AppKit 그리고 Cocoa Touch 등 apple의 framework에서 광범위하게 활용하고 있습니다. 주로 프레임워크 객체가 위임을 요청하고, 애플리케이션 프로그래머가 작성하는 커스텀 컨트롤러 객체가 위임 받아 특정 이벤트에 대한 기능을 구현합니다. 또한 델리게이션 디자인 패턴은 커스텀 컨트롤러에서 세부 동작을 구현함으로써 동일한 동작에 대해 다양한 대응을 할 수 있게 해줍니다.

예시

UITextFieldDelegate

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

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

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

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

DataSource

정의

DataSource는 데이터를 제어하는 기능을 위임받습니다.

예시

UITableViewDataSource, UICollectionViewDataSource


Protocol

정의

Protocol은 특별한 상황에 대한 역할을 정의하고 제시하지만 세부 기능은 미리 구현해두지 않습니다.

특징

구조체, 클래스, 열거형에서 프로토콜을 채택하고 특정 기능을 수행하기 위한 요구사항을 구현할 수 있습니다.

Cocoa Touch에서 프로토콜을 사용하여 Delegation, DataSource를 구현할 수 있습니다.

객체간 소통을 위한 강력한 통신 규약으로 데이터나 메시지를 전달할 때 사용합니다.


실습

중간에 문서보기!!!

UIImagePickerController.InfoKey.originalImage로 변경

안녕하세요~

우선 lazy만 봐서는 이해하기 어렵습니다. 추가로 보셔야 할 자료가 있는데요, Closures입니다. 우선 두 키워드를 가지고 검색을 하시다 보면 연관검색어로 lazy property, lazy property closure  이렇게 나옵니다. 이 두가지를 가지고 한번 자료를 찾아보시면 됩니다 :)

closure : https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

lazy : https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html

0개의 댓글