Spring Aop, Ioc, DI
Spring Aop, Ioc, DI 의 개념
Spring Aop
-
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.
관점 지향은 어떤 로직을 기준으로 서비스 로직과 인프라 로직으로 나누어서 보고 인프라 로직을 모듈화 할 수 있는 프로그래밍 기법입니다.
- 인프라 로직 : 서비스 로직을 제외한 부가기능, 애플리케이션의 전 영역에서 나타날 수가 있음, 따라서 중복 코드를 만들어 낼 수 있음
-
AOP는 컴파일 시, 로드 타임 시, 런타임 시 3가지 경우에 적용을 시킬 수 있고
스프링 AOP 가 주로 사용하는 방법은 런타임시에 A라는 클래스 타입의 Bean 을 만들 때 A 타입의 Proxy Bean 을 만들어서 Aspect 코드를 추가하여 동작하게 합니다.
-
대표적인 예로는 @Transcational 이 있습니다.
Spring Aop 의 적용
1) 컴파일 타임 적용
- 컴파일 시점에 바이트 코드를 조작하여 AOP가 적용된 바이트 코드를 생성하는 방법.
2) 로드 타임 적용
- 순수하게 컴파일한 뒤, 클래스를 로딩하는 시점에 클래스 정보를 변경하는 방법
3) 런타임 적용
- 스프링 AOP가 주로 사용하는 방법. A라는 클래스 타입의 Bean을 만들 때 A 타입의 Proxy Bean을 만들어 Proxy Bean이 Aspect 코드를 추가하여 동작하는 방법.
- Aspect 코드 : 인프라 로직들을 모듈화 한 것
스프링 DI
- 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.
-
DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
의존관계 주입은 크게 4가지 방법이 있다.
- 생성자 주입
- 생성자를 통해서 의존 관계를 주입 받는 방법이다.
- 생성자 호출시점에 딱 1번만 호출되는 것이 보장 되므로 의존관계가 불변하다.
- 수정자 주입(setter 주입)
- 선택, 변경 가능성이 있는 의존관계에 사용
- 필드 주입
- DI 프레임워크가 없으면 아무것도 할 수 없다.
- 일반 메서드 주입
- 생성자 주입
## Spring IOC
- (inversion of control)의 약자로 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다.
- 즉 인스턴스의 생성부터 소멸까지를 IoC 컨테이너가 대신 관리해줍니다.이 과정에서 DI(의존성 주입)를 통해 IoC컨테이너에 주입시킵니다.