객체지향, SOLID
같은 종류의 작업을 하는 알고리즘을 정의각 알고리즘을 캡슐화, 그리고 알고리즘들을 서로 바꿔 사용할 수 있도록 한다.
하나의 객체 상태가 변경될 때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태 갱신을 할 수 있도록 한다.
객체에 추가적인 책임을 동적으로 부여상속을 사용하지 않아도 유연하고 융통성 있는 기능 확장을 가능하게 한다.
업무와 데이터를 2계층으로 분리한다.
클래스의 인터페이스를 클라이언트가 원하는 형태의 또 다른 인터페이스로 변환시킨다.
서브 시스템에 있는 여러 개의 인터페이스를 통합하는 한 개의 인터페이스를 제공한다.
행동과 리시버를 한 객체에 집어넣고, execute()라는 메소드 하나만 외부에 공개한다.
객체의 내부 상태가 바뀔 때 객체의 동작을 변경할 수 있도록 한다.
알고리즘의 뼈대를 정의하고 일부를 서브 클래스로 위임한다.
데이터와 뷰를 분리하고 이들을 연동시키는 컨트롤러를 추가한다.
부분- 전체 계층 구조를 보일 수 있도록 객체들을 트리 구조로 구성한다.