제어의 역전(IOC) : 프로그램의 제어 흐름 구조가 뒤바뀌는 것
일반적인 프로그램 흐름 : 능동적으로 각 오브젝트는 프로그램 흐름을 결정
- main() 에서 사용할 오브젝트 결정
- 결정한 오브젝트 생성
- 만들어진 오브젝트의 메소드 호출
- 다음에 사용할 것을 결정하고 호출
제어의 역전 : 이러한 흐름을 완전히 바꾸는 것
- 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않는다.(생성도 안함)
- 자신도 어떻게 만들어지고 어떻게 사용되는지 알 수 없다.
- 모든 오브젝트는 제어 권한을 갖는 특별한 오브젝트에 의해 결정되어지고 만들어진다.
- 이전 : ConnectionMaker의 구현 클래스를 결정하고 오브젝트를 만드는 제어권은 UserDao
- 리펙토링이후 : 해당 권한은 DaoFactory에 있다.
DaoFactory의 응용 : 만약 DaoFactory에 UserDao가 아닌 다른 Dao 생성 기능을 넣는다면?
결론 : 어떤 ConnectionMaker 구현 클래스를 사용하지를 결정하는 기능이 중복되서 나타난다.
DAO 팩토리 메소드가 아무리 많아져도 문제가 없다.