객체 지향적으로 프로그램을 구현하다 보면, 다른 객체가 제공하는 기능을 이용해서 자신의 기능을 완성하는 객체가 출현하게 된다.
한 객체가 다른 객체를 이용한다는 것은, 실제 구현에서는 한 객체의 코드에서 다른 객체를 생성하거나 다른 객체의 메서드를 호출한다는 것을 말한다.
public class FlowController {
//fileName 필드 초기화 코드 생략
public void process() {
FileDataReader reader = new FileDataReader(fileName); //객체 생성
byte[] plainBytes = reader.read(); //메서드 호출
ByteEncryptor encryptor = new ByteEncryptor(); //객체 생성
byte[] encryptedBytes = encryptor.encrypt(plainBytes); //메서드 호출
FileDataWriter writer = new FileDataWriter(); //객체 생성
writer.write(encryptedBytes); //메서드 호출
}
}
이렇게 한 객체가 다른 객체를 생성하거나 다른 객체의 메서드를 호출할 때 이를 그 객체에 의존(dependency)한다고 표현한다.
위 코드에서는 FlowController가 FileDataReader에 의존한다고 표현할 수 있다.
객체를 생성하거나 메서드를 호출하는 것뿐만 아니라 파라미터로 전달받는 경우에도 의존한다고 볼 수 있다.
뭐 이런식으로..
public void process(ByteEncryptor encryptor) {
}
의존한다는 것은 의존하는 타입에 변경이 발생할 때 나도 함께 변경될 가능성이 높다는 것을 뜻한다.