*loC란?
IoC는 Inversion of Control의 약자로 프레임워크의 핵심 요소이며 스프링에도 예외없이 존재하는 개념이다. IoC는 해석하면 제어의 역전 또는 제어의 반전이며 이것은 메소드나 객체의 호출작업이 개발자에 의해 결정되는 것이 아닌 외부(스프링)에서 결정되는 것을 의미한다.
제어의 반전 개념은 이미 폭넓게 적용되고 있다. 일반적으로 자바 프로그램은 main()메서드로부터 시작하여 개발자가 미리 정한 로직흐름을 따라 객체가 생성되고 실행된다.
하지만 서블릿은 다르다. 서블릿은 개발해서 서버에 배포할 수는 있지만, 배포하고 난 후에는 개발자가 직접 제어할 수 있는 방법이 없다. 대신 서블릿에 대한 제어 권한을 가진 컨테이너가 적절한 시점에 서블릿 클래스이 객체를 만들고 그안의 메서드를 호출한다.
이러한 방식은 대부분의 프레임워크에서 사용하는 방법으로, 개발자는 필요한 부분을 개발해서 끼워 넣기의 형태로 개발하고 실행하게 된다. 프레임워크가 이러한 구조를 가지기 때문에, 개발자는 프레임 워크에 필요한 부품을 개발하고, 조립하는 방식의 개발을 하게된다.
이렇게 조립된 코드의 최종 호출은 개발자에 의해서 제어되는 것이 아니라, 프레임워크의 내부에서 결정된 대로 이루어지게 되는데, 이러한 현상을 제어의 역전 또는제어의 반전 이라고 표현한다.
loC의 특징
- 개발자가 객체 생성을 직접하지 않고 컨테이너에서 객체 생성/소멸 등을 관리
- 개발자가 직접 컨트롤 할 수 없음
- Spring에서 loC Container인 ApplicationContext에서는 bean.xml 또는 annotation을 이용하여 객체를 관리
*DI란?
DI는 Dependency InJection의 약자로 IoC의 핵심 요소이며 제어의 반전이 일어날때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하는 기법이다.
DI는 의존성 주입을 의미하며 이는 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라, 특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것을 의미한다. 즉, 클래스의 기능을 추상적으로 묶어놓은 인터페이스를 가져다 쓰면 되는 것이며, 그 밖은 스프링에서 객체를 주입해준다. 따라서 이러한 의존성 주입으로 인해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
DI의 특징
- 하나의 모듈/서비스가 가지고 있는 의존성을 외부로 통해 주입을 받는다.
- 주입 방식은 생성자, setter등을 이용하여 의존성을 주입 받을 수 있다.
- Spring에서는 @Autowried의 키워드를 이용하여 의존성 주입이 되는 대상을 지정한다.
'Spring' 카테고리의 다른 글
Spring / Filter와 Interceptor (0) | 2020.07.10 |
---|---|
Spring / AOP란? (0) | 2020.07.10 |
Spring / Spring이란? (0) | 2020.07.10 |
Spring / Understanding MicroSERVICE Architecture (0) | 2020.06.16 |
Spring batch에서 멀티스레드로 Step실행하기 (0) | 2020.05.31 |