본문 바로가기

iOS

Delegate? DatsSource?

728x90

UIKit를 다루다보면 많이 접하는 개념이 Delegate와 DataSource이다. (예를 들면, UITableViewDeleate / UITableViewDataSource) 

 

그러면, 모든 UIKit가 Delegate와 DataSource를 갖고 있을까?

... 

그렇지는 않다. 예를 들어서 UITableView의 경우 둘 다를 채택할 수 있지만, UITextView의 경우는 Delegate만 채택할 수 있다.

그렇다면 Delegate와 DataSource의 차이는 무엇일까?

 

이름에서 어느정도 유추할 수 있다.

Delegate의 경우, 대리자(누군가가 해야 할 일을 대신 해주는 것) .. 라는 의미가 있기 때문에 특정 역할을 담당, 즉 어떠한 기능을 담당하고 있다고 볼 수 있다.

그리고 DataSource는 기능보다는 어떤 컨텐츠를 보여줄 것인지, data를 담당하고 있다.

 

 

Delegate

Delegate는 해당 UIComponent의 동작을 설정한다.

앞에서 말한 것처럼 DataSource는 보여주는 것에 초점을 두고 있다면, Delegate는 사용자가 그 보이는 것들 중에서 어떠한 것을 (특정한 부분)을 탭하거나 밀었을 때 등 ... 행동에 대한 동작을 수행한다.

 

예를 들어서, UITableView를 살펴보면 다음과 같다. 

// 테이블 뷰의 셀을 탭하는 '동작'에 대한 함수
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath)

// 테이블 뷰의 셀을 편집하려고 하는 '동작'에 대한 함수
func tableView(tableView: UITableView, willBeginEditingRowAtIndexPath indexPath: IndexPath)

위의 함수들처럼 해당 UIComponent에 대한 특정한 행동을 했을 때 그에 대한 수행을 나타내는 것을 담당합니다. 

 

 

DataSource

DataSource는 데이터를 받아서 뷰를 그려주는 역할을 한다.

어떠한 내용을 어떻게 보여줄 것인지 등을 담당하고 있다.

 

예를 들어서, UITableView를 살펴보면 다음과 같다.

// 테이블 뷰에 어떠한 셀을 '보여줄' 것인가
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell 

// 테이블 뷰의 섹션은 몇개로 하여 '보여줄' 것인가
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int // return a number ie an Int

// 테이블 뷰의 섹션 헤더의 타이틀은 무엇으로 '보여줄' 것인가
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?

위에서 말한 함수 이외로, 테이블 뷰를 어떻게 보여줄 것인지, 어떠한 내용을 나타낼 것인지 .. 를 설정하는 다양한 함수가 있다.

 

 

'iOS' 카테고리의 다른 글

ATS(App Transport Security)  (0) 2022.07.28
UIResponder  (0) 2022.07.28
UIViewPropertyAnimator  (0) 2022.04.29
Swift Package Manager Update  (0) 2022.04.26
개발자 계정 팀 인증서 등록  (1) 2022.04.21