- 애플리케이션에서 달라 지는 부분을 찾아내고, 달라 지지 않는 부분으로부터 분리 시킨다.
-> 달리지는 부분을 찾아서 나머지 달라 지지 않는 부분에 영향을 주지 않도록 캡슐화 한다.
-> 달라 지는 부분을 캡슐화해서 분리하면, 코드를 변경하는 과정에서 의도하지 않은 일이 일어나는 것을 줄이고, 시스템의 유연성은 향상 시킬 수 있다. - 구현이 아닌 인터페이스에 맞춰서 프로그래밍 한다.
-> 변경되지 않는 부분에서 인터페이스로 구현된 부분에 대해서는 관심을 가지지 않아도된다. - 상속 보다는 구성을 활용한다.
->A는 B이다. 보다는 A에는 B가 있다가 나을 수 있다.
->구성(Composition)을 이용하여 시스템을 만들면 유연성을 크게 향상 시킬 수 있다.(유연성은 변경된 부분을 캡슐화하여 실행 시에 행동을 바꿀 수 있도록 한다.)