[iOS] TableView Delegate Pattern

RudinP·2024년 2월 20일
0

Study

목록 보기
169/227

개념

  • 하나의 객체가 다른 객체의 기능을 대신 처리해주는 패턴
  • 위임받은 객체를 델리게이트 객체라고 한다.

공통 특징

  • 첫번째 파라미터로 메소드를 호출한 객체를 보내줌

TableView

  • 테이블 뷰의 셀을 선택했을 때 발생해야 하는 이벤트는 한두가지가 아니다.
  • 따라서 테이블 뷰 자체는 어떤 항목이 선택되었는지만 인식하고, 셀이 선택되었을 때의 이벤트는 델리게이트 객체가 처리한다.
  • 이름이 ~dataSource, ~delegate 로 끝나는 속성들이 있는데, 위임받을 객체를 이 속성에 저장하면 된다.

DataSource

  • 테이블 뷰 자체는 몇 개의 셀을 어떤 내용으로 표시할 지 모른다.
  • 따라서 셀의 개수, 내용을 DataSource에서 채워 리턴해주어야 한다.
  • 이렇게 필요한 데이터를 제공해주는 객체를 DataSource라고 한다.

Delegate

  • 이벤트를 대신 처리해주는 객체.
  • 테이블뷰는 델리게이트에게 이벤트가 발생했다는 것을 알려주고, 처리는 델리게이트가 하는 방식.

Protocol

  • 델리게이트 객체는 반드시 프로토콜에 선언되어있는 대로 메소드를 구현해야 함.
  • 델리게이트 패턴으로 구현한 메소드는 우리가 직접 호출하지 않는다.

에러의 종류

  • Required Request 에서 Delegate 객체가 없을 경우 -> Crash
  • 필수 메소드가 구현되어있지 않을 경우 -> Build 불가
  • Optional Request 에서 Delegate 객체가 없을 경우 -> 이벤트 무시(무반응)
  • Optional Request 에서 선택적 메소드가 구현되어있지 않을 경우 -> 이벤트 무시

Delegate 구현 Step

1. 레퍼런스를 보고 델리게이트가 필요한지 확인

2. 필요하다면 프로토콜에서 필수 메소드 확인

3. 객체를 연결(스토리보드 혹은 코드에서 연결)

  • 보통은 VC가 객체가 됨.

4. 프로토콜에 선언된 필수 메소드 구현

  • VC에서 구현
  • 공식 문서에서 required라고 표시되어 있다.

TableView Delegate

1. TableView 추가

2. TableView cell 추가

  • reuse Identifier 설정

3. VC에 DataSource 연결

  • 테이블뷰에 오른쪽 마우스 클릭 시 커넥션 웰 팝업

4. VC에 UITableViewDataSource Protocol 채택

5. 필수 메소드 구현

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글