[iOS] TableView Delegate Pattern
개념
- 하나의 객체가 다른 객체의 기능을 대신 처리해주는 패턴
- 위임받은 객체를
델리게이트 객체
라고 한다.
공통 특징
- 첫번째 파라미터로 메소드를 호출한 객체를 보내줌
TableView
- 테이블 뷰의 셀을 선택했을 때 발생해야 하는 이벤트는 한두가지가 아니다.
- 따라서 테이블 뷰 자체는 어떤 항목이 선택되었는지만 인식하고, 셀이 선택되었을 때의 이벤트는 델리게이트 객체가 처리한다.
- 이름이 ~dataSource, ~delegate 로 끝나는 속성들이 있는데, 위임받을 객체를 이 속성에 저장하면 된다.
DataSource
- 테이블 뷰 자체는 몇 개의 셀을 어떤 내용으로 표시할 지 모른다.
- 따라서 셀의 개수, 내용을 DataSource에서 채워 리턴해주어야 한다.
- 이렇게 필요한 데이터를 제공해주는 객체를
DataSource
라고 한다.
Delegate
- 이벤트를 대신 처리해주는 객체.
- 테이블뷰는 델리게이트에게 이벤트가 발생했다는 것을 알려주고, 처리는 델리게이트가 하는 방식.
Protocol
- 델리게이트 객체는 반드시 프로토콜에 선언되어있는 대로 메소드를 구현해야 함.
- 델리게이트 패턴으로 구현한 메소드는 우리가 직접 호출하지 않는다.
에러의 종류
- Required Request 에서 Delegate 객체가 없을 경우 -> Crash
- 필수 메소드가 구현되어있지 않을 경우 -> Build 불가
- Optional Request 에서 Delegate 객체가 없을 경우 -> 이벤트 무시(무반응)
- Optional Request 에서 선택적 메소드가 구현되어있지 않을 경우 -> 이벤트 무시
Delegate 구현 Step
1. 레퍼런스를 보고 델리게이트가 필요한지 확인
2. 필요하다면 프로토콜에서 필수 메소드 확인
3. 객체를 연결(스토리보드 혹은 코드에서 연결)
4. 프로토콜에 선언된 필수 메소드 구현
- VC에서 구현
- 공식 문서에서
required
라고 표시되어 있다.
TableView Delegate
1. TableView 추가
2. TableView cell 추가
3. VC에 DataSource 연결
- 테이블뷰에 오른쪽 마우스 클릭 시 커넥션 웰 팝업
4. VC에 UITableViewDataSource Protocol 채택
5. 필수 메소드 구현