추상화와 구현을 분리하여 각각을 독립적으로 변형할 수 있게 한다.
● Abstraction : 기능 계층의 최상위 클래스. 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현부분의 메서드를 호출합니다. ex) RemoteControl
● RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스 ex) RCAControl / SonyControl
● Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의 ex) TV
● ConcreteImplementor : 실제 기능을 구현합니다. ex) Sony / RCA
구체적인 부분과 추상화된 부분 모두에 대해 변경할 필요성이 있기 때문에, 사용하는 디자인 패턴