의존성
- 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이의 의존성이 존재하게 된다.
- 의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가진다. (출처: 오브젝트, 조영호)
- 컴파일타임 의존성: 코드를 작성하는 시점에서 발생하는 의존성. 클래스 사이의 의존성.
- 런타임 의존성: 애플리케이션이 실행되는 시점의 의존성. 객체 사이의 의존성.
public class Order{
private FixedAmountVoucher voucher;
public Order(long discount){
voucher = new FixedAmountVoucher(discount);
}
결합도
- 결합도란 “하나의 객체가 변경이 일어날 때에 관계를 맺고 있는 다른 객체에게 변화를 요구하는 정도"라고 볼 수 있습니다.
- 어떤 두 요소 사이에 존재하는 의존성이 바람직할 때 두 요소가 느슨한 결합도 또는 약한 결합도를 가진다고 말합니다. 반대로 두 요소의 의존성이 바람직하지 못할 때 단단한 결합도, 또는 강한 결합도를 가진다고 말함
- 위의 관계도에서
Order
가 FixedAmountVoucher
를 바로 가지는 게 아니라 Voucher
interface를 가짐으로써 결합도를 느슨하게 해줌
public class Order{
private Voucher voucher;
public Order(Voucher voucher){
this.voucher = voucher;
}