사전에 알아두면 좋을 것 (Java 기준)
1. 상속과 위임(delegation)의 차이 ( 참고 사이트 )
- 상속
- Is-A 관계
- 결합도 강함
- 부모 클래스가 바뀌면 자식 클래스에 영향
- 위임
- Has-A 관계
- 결합도 약함
- 보통 인터페이스로 구현
2. interface와 protocol의 차이 ( 참고 사이트 )
- Interface
- 파라미터의 초기값 설정가능
- 선언된 모든 메소드 구현
- static(정적 멤버) 선언할 수 없음
- Protocol
- 파라미터의 초기값 설정불가
- optional 키워드를 통해 선택적으로 구현 가능
- static(정적 멤버) 선언할 수 있음
✅⠀Delegation?
- Delegate : 대표(자), 사절, 위임, 대리(자)
델리게이션 디자인 패턴(Delegation Design Pattern)
- 델리게이션 디자인 패턴은 하나의 객체가 다른 객체를 대신해 동작 또는 조정할 수 있는 기능을 제공
- 델리게이션 디자인 패턴은 Foundation, UIKit, AppKit 그리고 Cocoa Touch 등 애플의 프레임워크에서 광범위하게 활용하고 있음.
- 주로 프레임워크 객체가 위임을 요청하며, (주로 애플리케이션 프로그래머가 작성하는)커스텀 컨트롤러 객체가 위임을 받아 특정 이벤트에 대한 기능을 구현합니다.
- 델리게이션 디자인 패턴은 커스텀 컨트롤러에서 세부 동작을 구현함으로써 동일한 동작에 대해 다양한 대응을 할 수 있게 해줍니다.
데이터소스(DataSource)
- 델리게이트가 사용자 인터페이스 제어에 관련된 권한을 위임받고, 데이터소스는 데이터를 제어하는 기능을 위임받습니다.
- UICollectionViewDataSource에서 데이터를 어떻게, 몇개 표시할지 구현
프로토콜(Protocol)
- 코코아터치에서 프로토콜을 사용해 델리게이션과 데이터소스를 구현할 수 있습니다.
- 객체간 소통을 위한 강력한 통신 규약으로 데이터나 메시지를 전달할 때 사용합니다.
- 프로토콜은 특별한 상황에 대한 역할을 정의하고 제시하지만, 세부기능은 미리 구현해두지 않습니다.
- 구조체, 클래스, 열거형에서 프로토콜을 채택하고 특정 기능을 수행하기 위한 요구사항을 구현할 수 있습니다.