Back Ground

IoC/AOP/컨테이너 본문

Spring

IoC/AOP/컨테이너

Back 2016. 7. 14. 17:03

제어의 역행 IoC(Inversion of Control)


우리가 비즈니스 컴포넌트를 개발할 때, 항상 신경 쓰는 것이 바로 낮은 결합도와 높은 응집도이다.

스프링은 제어의 역행 (Inversion of Control, IoC)을 통해 애플리케이션을 구성하는 객체 간의 느슨한 결합, 즉 낮은 결합도를 유지한다.


다음은 IoC가 적용되는 않은 상황과 IoC가 적용된 상황을 그림으로 표현한 것이다. IoC가 적용되기 전에는 애플리케이션 수행에 필요한 객체의 생성이나 객체와 객체 사이의 의존관계를 개발자가 직접 자바코드로 처리했었다. 이런 상황에서는 의존관계에 있는 객체를 변경할 때, 반드시 자바 코드를 수정해야 한다.


하지만 IoC가 적용되면 객체 생성을 자바 코드로 직접 처리하는 것이 아니라 컨테이너가 대신 처리한다. 그리고 객체와 객체 사이의 의존관계 역시 컨테이너가 처리한다. 결과적으로 소스에 의존관계가 명시되지 않으므로 결합도가 떨어져서 유지보수가 편리해진다.









관점지향 프로그래밍 AOP(Aspect Oriented Programming)


관점지향 프로그래밍은 비즈니스 메소드를 개발할 때,  핵심 비지니스 로직과 각 비즈니스 메소드마다 반복해서 등장하는 공통 로직을 분리함으로써 응집도가 높게 개발 할 수 있도록 지원한다.

공통으로 사용하는 기능들을 외부의 독립된 클래스로 분리하고, 해당 기능을 프로그램 코드에 직접 명시하지 않고 선언적으로 처리하여 적용하는 것이 관점지향 프로그래밍의 기본 개념이다. 이렇게 되면 공통 기능을 분리하여 관리할 수 있으므로 응집도가 높은 비즈니스 컴포넌트를 만들 수 있을 뿐만 아니라 유지보수를 혁신적으로 향상시킬 수 있다.








컨테이너(Container)


컨테이너는 특정 객체의 생성과 관리를 담당하며 객체 운용에 필요한 다양한 기능을 제공한다.

컨테이너는 일반적으로 서버 안에 포함되어 배포 및 구동된다. 대표적인 컨테이너로 Servlet 객체를 생성하고 관리하는

'servlet 컨테이너'와 EJB 객체를 생성하고 관리하는 'EJB 컨테이너'가 있다. 그리고 Servlet 컨테이너는 우리가 사용하는 톰캣 서버에도

포함되어 있다.

애플리케이션 운용에 필요한 객체를 생성하고 객체 간의 의존관계를 고나리한다는 점에서 스프링도 일종의 컨테이너라고 할 수 있다.



'Spring' 카테고리의 다른 글

Spring EcoLibrary - Mybatis 순서  (0) 2016.10.12
Spring Framework: annotation 정리 #1  (0) 2016.09.22
Spring 컨테이너 및 설정 파일  (0) 2016.07.19
IoC 컨테이너  (0) 2016.07.15
결합도/다형성/디자인 패턴  (2) 2016.07.14
Comments