개발을 하다보면 코드와 코드가 서로 결합력이 높아지는 경우가 생긴다.

위의 그림을 보면 Service가 B1을 사용하고 있는 와중에 B1코드를 수정해버리면 Service 영역의 코드 또한 수정을 해야한다. 당연히 작은 프로그램에서는 큰 문제는 없겠지만 매우 큰 프로그램에서는 그 일이 굉장히 힘든일이다. 이러한 결합도를 낮출 필요가 있다.
"의존이란?"
변경에 의해 영향을 받는 관계를 의미한다. 만약 A 클래스에서 private 변수로서 B 클래스의 객체를 가지고 있다면 다른 B 클래스 객체의 함수명을 바꾼다면 A클래스 내부함수에서 사용하고 있는 B클래스의 함수이름또한 바꿔야 한다. 이처럼 변경에 따른 영향이 전파되는 관계를 '의존'한다고 표현한다.
<Composition has a>
class A
{
private B b;
public A(){
b = new B();
}
}
<Association has a>
class A
{
private B b;
public A(){
}
public void setB(B b){
this.b = b;
}
}
B b = new B();
A a = new A();
a.setB(b);