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 |