[Spring] IoC 제어역전
1. Invertion of Control
제목 그대로 제어 역전.
일반적으로 프로그램을 개발시 main에서 개발자가 직접 object를 생성하거나 사용하며 프로그램을 개발한다.
하지만 IoC는 개발자의 흐름이 아닌 프레임워크에서의 흐름대로 오브젝트가 생성되거나 실행되며, 우리 개발자들은 그 과정이 어떻게 일어나는지를 모른다.
IoC는로 제어권한이 개발자가 아닌 프로그램이 갖고있어 최소한의 코딩만으로 그 이상의 결과를 뽑아낼수 있다는것이다.
2. IoC applied Code.
public class main {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
UserDao userdao = new DaoFactory().userDao();
...
}
}
public class DaoFactory {
public ConnectionMaker connectionMaker() {
return new Acompany();
}
public UserDao userDao(){
return new UserDao(connectionMaker());
}
}
위의 코드를 보면 main에서 dao를 DaoFactory를 통해 가져오고있다.
DaoFactory에서는 new UserDao 라며 new Acompany()를 생성자로 통해 반환되고 있다.
그저 흔히 있는 코드처럼 보일지는 몰라도 중요한건 단순 이러한 코드를 작성하는 개발자 입장에서는 UserDao의 객체가 어떤식으로 만들어지는지 알 필요가 없다는 것이다.
또한 생성자를 통해 객체를 넣고있어 이건 개발자가 생성시키는게 아닌 것이라는 점이다.
개발자 흐름대로 진행되어야하는 프로그램이지만 이미 정의된 코드로 인해 나도 모르게 오브젝트가 생성되고있다는 점을 중점으로 보면 된다.
3. Framework <> Library
IoC는 프레임워크와 관련이 많다. 아니 IoC = 프레임워크라 불려도 될정도이다.
그럼에도 Framework와 Library에 차이가 보통 혼동이 많이되는데 가장 큰 차이가 IoC 차이이다.
- Library : 특정 목적을 위해 만들어진 함수의 집합,
IoC의 개념이 적용되어 있지않아 사용자의 흐름대로 프로그램을 제어할수 있다.
- Framework : 이미 반(半)쯤 만들어진 소프트웨어
IoC의 개념이 적용되어 있어 프레임워크 컨테이너 위에서 개발한다.