소프트웨어 모듈이 가져야 하는 세 가지 기능 실행 중 제대로 동작 변경을 위해 존재하는 것 코드를 읽는 사람과 의사소통 하는 것 변경에 취약한 코드 변경에 취약한 코드는 의존성과 관련이 높다 의존성은 변경에 대한 영향을 암시 객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것 (기능을 구현하는 최소한의 의존성만 유지하고 불필요한 의존성은 제거) 객체 사이의 의존성이 과한 것을 결합도가 높다고 한다 설계의 목표는 객체 사이의 결합도를 낮춰 변경이 용이한 설계를 만드는 것 자율성을 높이자 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것을 "캡슐화" 라고 한다 캡술화의 목적은 변경하기 쉬운 객체를 만드는 것 객체를 인터페이스와 구현으로 나누고 인터페이스만 공개하는 방법이 가장 ..