1. DI(의존성주입), IoC(제어 역전)

보통 클래스 내부에서 new 로 객체의 인스턴스를 받아서 사용하는 방식은 모듈간의 강한결합을 불러오기 때문에, 변경이나 확장 등에서 자유롭지 못하다.


하지만 생성자, setter 등으로 외부에서(IoC) 생성된 객체의 인스턴스를 받아서 사용만(DI)하는 구조로 개발을 해 놓으면 변경이 있을때 해당하는 부분의 클래스만 변경이 가능하다.

2. AOP

자바는 하나의 클래스에 대한 수직적인 흐름만 제어할 수 있는 반면 스프링을 쓰면 특정 클래스들에 대한 수평적인 제어가 가능해 진다. 가령 *Controller.do 패턴이 들어오면 전처리로 A 빈 클래스를 실행하라는 선언이 가능하다. 수직적인 제어로 불완전 했던 Java 가 스프링을 만나며 수직, 수평 제어 모두 가능하게 되었습니다.



이를 위해서 IOC 컨테이너가 이미 다 구현해 놓았다. 그렇기 때문에 Spring은 개발하기 편한 환경을 제공해 준다.


<결론>

스프링이 IoC를 실현하는 방법으로 대표적인 것이 그 유명한 DI와 AOP가 있으며, 우리 개발자가 할 일은 스프링이 관리할 것들에 대한 메타정보만 작성해서 주면 되고, 나머지 시간은 비즈니스 로직에 더 집중하면 된다.


Spring Bean 등록

너가 만든 객체들 중에 내가 관리해야 할 녀석들을 알려줘, 

java, xml, annotation 등 상관없어 너가 편한 방식으로 나에게 메타정보를 작성해서 알려줘


DI(Dependency Injection)

객체(Bean)들간의 의존성은 생성할 때 내가 다 의존성을 넣어 주고, 관리하도록 할게 ! 너는 나에게 그 메타정보만 작성해서 알려줘 


AOP(Aspect Oriented Programming)

반복적으로 적용되는 횡단 관심사(Aspect)도 내가 다 적용시켜줄게, 너는 어떤 로직(advice)을 어떤 녀석(point cut)에게 붙여주면 되는지 나에게 메타정보만 작성해서 알려줘





Bean 

 IoC방식으로 관리하는 오브젝트. Managed object라고 불리기도 한다.

스프링은 Bean 객체의 생성 및 제어를 담당한다.


Bean FactoryA

 IoC를 담당하는 핵심 Container다. Bean 등록, 생성, 조회 기능을 한다.

Bean Factory를 직접 사용하지는 않고, 이를 확장한 Application Context를 사용한다.


Application Context

 Bean Factory를 확장한 IoC Container 이다. 


Configuration metadata

 IoC 컨테이너를 사용하기 위한 configuration 정보들이 들어있다.

청사진 (blueprint) 로 볼 수 있다.


IoC Container

 Bean Factory, ApplicationContext를 IoC Container라고 부른다.

Container 라는 단어 자체가 IoC의 뜻을 내포하고 있다.

흔히 말하는 '스프링' 은 IoC Container 와 같은 표현이다.



출처: http://feco.tistory.com/111 [wmJun]

'Programming > Spring' 카테고리의 다른 글

POJO  (0) 2018.05.14
AspectJ Aop설정방법  (0) 2018.05.14
event.preventDefault() / event.stopPropagation()  (0) 2018.05.13
jstl 간단 사용법  (0) 2018.05.13
jQuery 간단 사용법  (0) 2018.05.13

+ Recent posts