duck typing은 행동을 먼저 본다
호출에 필요한 메서드가 있으면 구체 타입과 상속 계보를 묻지 않고 쓸 수 있어. 유연하지만 문서와 정적 도구가 없으면 계약이 늦게 드러날 수 있어.
Protocol은 구조를 선언해
어떤 메서드와 속성이 필요한지 적으면 명시적으로 상속하지 않은 기존 클래스도 그 모양을 만족할 수 있어. 호출자가 인터페이스를 소유하고 외부 타입까지 받아야 할 때 잘 맞아.
ABC는 명시적인 가족을 만든다
추상 메서드와 공통 구현을 제공하고 하위 클래스가 계보에 들어오게 해. 프레임워크가 생성·수명·공통 동작을 통제해야 한다면 ABC가 더 분명해.