https://manasaprema04.medium.com/different-ways-to-pass-data-between-viewcontrollers-views-8b7095e9b1bf

https://vanillacreamdonut.tistory.com/272

1. Delegation design pattern 델리게이션 디자인패턴

하나의 객체가 다른 객체를 대신해 동작 또는 조정할 수 있는 기능

//UITextFieldDelegate 예시

// 대리자에게 특정 텍스트 필드의 문구를 편집해도 되는지 묻는 메서드
func textFieldShouldBeginEditing(UITextField)
	
// 대리자에게 특정 텍스트 필드의 문구가 편집되고 있음을 알리는 메서드
func textFieldDidBeginEditing(UITextField)

// 특정 텍스트 필드의 문구를 삭제하려고 할 때 대리자를 호출하는 메서드
func textFieldShouldClear(UITextField)

// 특정 텍스트 필드의 `Return` 키가 눌렸을 때 대리자를 호출하는 메서드
func textFieldShouldReturn(UITextField)

DataSource(데이터소스)

델리게이트와 매우 비슷한 역할을 한다.

델리게이트가 사용자 인터페이스 제어에 관련된 권한을 위임받고, 데이터소스는 데이터를 제어하는 기능을 위임받는다.

주로 많이 사용되는 UITableViewDataSource와 UICollectionViewDataSource가 있다.

Protocol

코코아터치에서 프로토콜을 사용해 델리게이션과 데이터소스를 구현할 수 있다.

객체간 소통을 위한 강력한 통신 규약으로 데이터나 메시지를 전달할 때 사용

프로토콜은 특별한 상황에 대한 역할을 정의하고 제시하지만, 세부기능은 미리 구현해두지않는다.