관점 지향 프로그래밍(Aspect Oriented Programming )에 대해 알아봅니다.
IoC를
이용하여 협력하는 객체를 쉽게 연결가능하나 때로는 전체 애플리케이션에 걸쳐 사용되어야 하는 기능이 필요할 수도 있다.
DI의
목적이 Application간
결합도를
떨어뜨리는 것이 목표라면 AOP의
목적은 횡단관심사(Cross-Cutting
Concerns)와
이에 영향을 받는 객체간 결합도를 떨어뜨리는 것이다.
-공통적인
기능을 한곳에서 정의
-새로운
기능을 적용하려고 하는 클래스를 수정할 필요 없이 그런
기능을 어디에 어떻게 적용할 것인지 선언적으로 정의 가능
-
각
관심사에 관한 로직이
애플리케이션 전체에 걸쳐 관리되지 않고 Aspect라고
하는 곳에서 관리된다.
-
애플리케이션
고유의 비지니스로직
처리가 명확해 진다.
-
Logging은
시스템 내에서 거의 모든 경우에 적용하긴 하지만,
실제로
특정한 비즈니스 로직과는
전혀 관련이 없다.
만일
AOP방식으로
구현한다면 다음과 같은 특징을 가지게 된다.
실제
비즈니즈
로직의
구현을 담당하는 Object는
아무런 로그 관련 객체 정보가 없다.
자바의
경우 이
Object의
특정 메쏘드를 호출하는 시점에 지정된 다른 서비스(로깅)가
실행된다.
Spring에
AOP는
두 가지에 의존한다.
인터페이스
기반의 프로그래밍을 하는 경우에는 JDK의
java.lang.reflect의
Proxy를
이용해서 AOP를
이용하는 방식과 CGLIB를
이용해서 사용하는 방식으로 구성된다.
우선
AOP를
제대로 이해하기 위해서는 java.lang.reflect의
Proxy를
이용해서 서비스 기반의 프로그램이 어떻게 돌아가는지 이해하는 것이 도움이 된다.
댓글 없음:
댓글 쓰기