✌️ Chapter 5: 오리 타입으로 비용 줄이기
- 오리 타입(duck typing)은 특정 클래스에 종속되지 않은 퍼블릭 인터페이스이다.
- 여러 클래스를 가로지르는 이런 인터페이스는 클래스에 대한 의존을 유연하게 만들어 준다.
📚 오리 타입 이해하기
- 애플리케이션은 특정 클래스에 종속되지 않은 퍼블릭 인터페이스를 정의할 수 있다.
- 객체를 사용하는 사람은 모든 객체가 자신이 구현하고 있는 어떤 인터페이스 또는 모든 인터페이스에 맞춰 행동하리라 믿어도 된다. 진짜 중요한 것은 객체가 무엇인가가 아니라 어떻게 행동하는가이다.
🎈 오리 타입 무시하기
Trip
의prepare
메서드는 자신이 인자로 받은mechanic
객체에게prepare_bicycles
메시지를 전송한다.Mechanic
클래스를 참조하는 객체가 없다.
class Trip
attr_reader :bicycles, :customers, :vehicle
# 무엇이든 이 mechanic 인자의 클래스 가 될 수 있다.
def prepare(mechanic)
mechanic.prepare_bicycles(bicycles)
end
# ...
end
# 우연히 아래 클래스의 인스턴스를 넘겨준다면, 제대로 작동할 것이다.
class Mechanic
def prepare_bicycles(bicycles)
bicycles.each {|bicycle| prepare_bicycle(bicycle)}
end
def prepare_bicycle(bicycle)
#...
end
end
- 위 코드에서
prepare
메서드 자체는Mechanic
클래스에 의존하고 있지 않지만,prepare_bicycles
메서드에 반응할 수 있는 객체를 수신해야 한다는 사실에 의존하고 있다.