만약 내가 저녁 디너 파티를 주최했다고 해보자. 여러 음식들을 손님들에게 대접해야한다. 하지만 내가 모든 것을 준비하기에는 너무 귀찮다! (INTP특)
요리셰프(DataSource
)
데이터 소스라는 객체에게 요리준비하라고 명령한다
이때 요리셰프는 어떻게 요리를 배치할지는 신경쓰지 않는다. 단지 스파게티, 피자 등 음식만 만들어내면 된다
웨이터(Delegate
)
웨이터라는 객체에게는 손님 대접을 명령한다
손님의 음식 추가 오더를 받고 손님의 요구에 따라 음식을 서빙한다
이와 같이 객체를 만들어 내가 할 일 을 대신 시킴으로써 나 자신을 가볍게 하고 책임과 역할 분리를 명확하게 할 수 있다!!
delegate
나 dataSource
로 끝나는 속성들이 있다dataSource
: 테이블뷰의 셀이 몇개인지등 테이블 뷰의 정보를 dataSource
객체에게 위임했다 delegate
: 테이블뷰가 이벤트가 발생한 사실을 델리게이트에게 토스한다반드시 위임해야할 이벤트가 발생했는데 부탁(위임)할 객체가 없는 상황
-> 앱 크래쉬 발생!
-> 예를 들어 데이터소스가 없으면 테이블 뷰에 몇개를 표시해야할지 모름
위임할 객체가 있지만 객체가 토스받은 이벤트를 처리하지를 못하는 상황, 즉 위임받은 이벤트에 대한 객체만 있고 내부에 메서드 구현이 안되어있는 상황
-> 컴파일 에러발생!
반드시 처리해야할 이벤트는 아니지만 위임할 객체가 없는 경우, 예를들어 셀을 탭하면 후속동작이 없어도 되는 케이스
-> 에러 처리 안되고 그냥 이벤트 발생시 아무런 변화 없음
개발자 문서를 통해 필수적인 이벤트를 처리하는 델리게이트를 확인한다
(안넣으면 크래쉬나기 때문에)
명령을 내리는 객치와 명령을 받는 객체를 연결한다.
스토리보드, 코드로 연결해준다
마지막으로 델리게이트로 지정한 객체에서 프로토콜로 선언되어 있는 필수 메서드를 구현하면 끝!