객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 해야할일 중 일부를 다른 객체에게 넘기는 것(위임하는 것)
대표적으로 TableViewDelegate가 있다 뷰컨트롤러에 딜리게이트 함수를 정의하고 테이블뷰의 동작이 일어나면 해당 딜리게이트 함수를 호출하고 뷰컨트롤러가 대신 처리해줌
Delegate는 객체 간의 작업이여서 참조 값을 사용하기 때문에 retain 현상이 일어난다. 해결방법은 weak를 사용하여 참조 횟수를 올리지 않는 방법