DI와 IoC
웹을 위한 스프링 프레임워크 모듈
Java SE 위에는 Java EE 또는 Spring을 얹을 수 있다. Java SE는 가장 대중적인 자바 플랫폼으로
java.lang.*, java.util.* 등과 같이 대부분의 패키지가 포함된 것을 말한다.
Java EE는 Java SE 플랫폼을 기반으로 그 위에 탑재되고
JSP, Servlet, JDBC 등 웹 프로그래밍에 필요한 기능을 다수 포함한다.
Spring은 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션을 말한다.
앞으로 배울 내용을 간략히 하면 아래와 같다.
느슨한 결합력과 인터페이스 -> DI -> MVC
AOP -> 트랜잭션
Servlet Filter -> 인증과 권한
느슨한 결합력과 인터페이스
만약 코드를 수정하고 싶다면 수정된 코드를 가지는 B2 DAO를 사용할 수 있다.
하지만 이 수정된 DAO을 사용하려면 Service의 코드도 수정이 되어야 한다.
이때는 결합력이 높다고 할 수 있다.
결합력이 낮게 하기 위해서는 아래와 같이 인터페이스(B)를 사용한다.
아까 사용하려던 B1을 B2로 바꾸려면 소스 코드 변경없이 객체 생성과 조립을 위해
외부 설정인 XML과 어노테이션을 사용한다.
DI(Dependency Injection)
위의 그림은 일체형이기 때문에 그 안에 부품이 무엇이 있는지 잘 모르고 부품을 바꿔낄 수도 없다.
아래의 그림은 조립형이기 때문에 A를 사용하기 위해서는 그냥 사용할 수 있는 것이 아니라
A가 가지고 있는 부품인 B를 준비해서 꽂아줘야 한다.
이때 부품을 Dependency라고 하고 꽂아주는 것을 주입 즉, Inject이라고 한다.
주입하는 방법에는 2가지가 있다.
세터를 이용해서 주입하는 방법과 생성자를 이용해서 주입하는 방법이다.
근데 이때 조립할 때에는 직접 조립해야한다는 점이 불편하다. 그 부품을 조립(DI)을 해주는 것이 스프링이다.
Ioc(Inversion Of Control)
일체형일 경우에는 A 클래스가 만들어지고 B 클래스가 만들어진다.
하지만 아래와 같이 조립형일 경우에는 D 클래스가 먼저 만들어지고 C 클래스가 만들어져 결합된다.
이 순서가 역순으로 이루어지는 것을 볼 수 있는데 이를 Ioc라고 한다.
그리고 이러한 부품을 담기 위한 컨테이너가 필요한데 그 컨테이너를 IoC 컨테이너라고 한다.