(캡슐화되어 있는) 여러 가지 로직을 상황에 따라 교환하여 사용할 수 있다면 어떨까? 어떤 기능 또는 알고리즘을 사용할 때 상황에 따라서 변경할 필요가 있습니다. 이럴 때 사용하면 좋은 패턴입니다. 이 패턴을 사용함으로써 사용하는 주체(클래스)는 이 기능 또는 알고리즘 로직에 대해서 세부적인 내용을 몰라도 되고, 이 로직이 변경되었을 때, 사용하는 주체는 변경 상관없이 코드 변경을 할 필요가 없습니다. 그림1에서 보면 Duck클래스는 fly()라는 기능을 사용하기 위해서, FlyBehavior 인터페이스를 구성(composition)합니다. 그리고 Duck클래스의 구상클래스인 RubberDuck이나 DecoyDuck의 생성자에서 FlyBehavior의 인스턴스인 flyBehavior를 용도에 따라서 Fl..