모든 소프트 웨어 모듈에는 세가지 목적이 있다.
첫 번째 목적은 재대로 동작하는 것
두 번째 목적은 변경을 위해 존재하는 것
세 번째 목적은 코드를 읽는 사람과 의사소통하는 것
- 클린 소프트웨어: 에자일 원칙과 패턴, 그리고 실천 방법, 로버트 마틴
객체 사이의 결합도를 낮춰 변경이 용이한 설계를 만드는 것
설계를 어렵게 만드는 것은 의존성 이다.
불필요한 의존성을 제거함으로 객체 사이의 결합도를 낮춰야한다.
결합도를 낮추는 방법은 세부사항을 내부로 감춰 캡슐화 하는 것이다.
캡슐화 하는 것은 객체의 자율성을 높이고 응집도 높은 객체들의 공동체를 창조할 수 있게 한다
어떻게(how)가 아니라 무엇을(what)에 집중하라
수동적인 Audience
// Theater class 내부
public void enter(Audience audience) {
if(audience.getBag().hasInvitation()) {
...
}
}
Theater 이 audience 의 가방에서 티켓을 찾는 것은 audience 가 수동적 이다.
자율적인 Audience
// Theater class 내부
public void enter(Audience audience) {
audience.buy(ticket)
}
// Audience class 내부
public Long buy(Ticket ticket) {
if(bag.hasInvitation()) {
...
}
}