Duck typing
Reference
Practical Object Oriented Design in Ruby - Sandi Metz
Note
"Duck typing은 특정 클래스에 종속되지 않은 퍼블릭 인터페이스이다. 여러 클래스를 가로지르는 이런 인터페이스는 클래스에 대한 값비싼 의존을 메시지에 대한 부드러운 의존으로 대치시킨다." - p97
Note
"객체지향 디자인은 구체적인 코드를 작성하는 비용 그리고 추상적인 코드를 작성하는 비용 사이의 긴장에서 결코 자유로울 수 없다. (중략) 오리 타입을 사용하면 코드는 구체적인 것에서 추상적인 것으로 바뀐다." - p107
Note
"동적 타입은 컴파일 순간의 타입 확인과 상당한 수준의 개발 효율성을 맞바꿀 수 있게 해준다. 전자는 비싼 대가를 치루고 낮은 이익을 얻는 제약사항이며, 후자는 compile/make 과정을 생략하면서 얻을 수 있는 이득이다. 이건 남는 게 많은 교환이다. 오리 타입은 정적 타입 위에서 만들어진다. 오리 타입을 사용하기 위해서는 동적 타입을 받아들여야만 한다." - p117
Note
"메시지는 퍼블릭 인터페이스를 따라 객체들 사이를 오간다. 오리 타입은 이 퍼블릭 인터페이스를 클래스로부터 분리해낸다. 그리고 '객체가 누구인지'가 아니라 '객체가 무엇을 하는지'에 따라 가상의 타입을 만들어낸다." - p117
Note
"오리타입은 오리타입이 없었다면 발견하지 못했을 추상화를 볼 수 있게 해준다. 이 추상화에 의존할때 애플리케이션의 위험성은 줄어들고 유연성은 증가한다. 유지보수 비용이 줄어들고 쉽게 수정할 수 있게 해준다." - p118