핵심 가치와 목적이 드러나는 핵심 관심(core concerns) 영역에서 각 핵심 관심을 관통하는 횡단 관심(crosscutting concerns)을 분리함으로써 시스템의 모듈화를 이뤄내는 새로운 프로그래밍 패러다임.
- 핵심 관심: 해당 애플리케이션이 이루고자하는 주 목적.
AOP의 등장배경1. 점점더 복잡해져가는 애플리케이션의 구조와 구현 내용 -> 단순화의 요구 증대
2. OOP가 이뤄내는 관심 분리를 위한 모듈화, 재사용성의 한계 대두 -> 더 높은 수준의 모듈화, 재사용성 요구 증대(OOP는 핵심 모듈에서 횡단 관심 모듈을 찾아 사용하는 구조. 필연적으로 핵심 모듈과 횡단 관심 모듈 사이에 coupling이 일어날 수 밖에 없다)
AOP의 특징1. AOP(관점 지향 프로그래밍)은 OOP를 대체하지 않는다 -> 오히려 OOP를 완성해가는 입장
2. weaving(위빙) 또는 crosscutting(크로스커팅)을 통한 핵심 모듈과 횡단 관심 모듈의 결합 :디자인 타임이 아닌 컴파일 타임에 결합이 일어남 -> 핵심 관심 모듈의 코드에 전혀 영향을 주지 않기 때문에 기존 OOP 코드를 그대로 사용 가능함. 재사용성, 모듈화 증가.
AOP의 구성요소1. 조인트 포인트(Joint Point)
-
횡단 관심 모듈의 기능이 삽입되어 동작할 수 있는 실행 가능한 특정위치
2.
포인트컷(Pointcut)
- 어떤 클래스의 어느 조인포인트를 사용할 것인지를 결정하는 선택 기능
3.
어드바이스(advice) 또는 인터셉터(intercepter)
- 어드바이스: 각 조인포인트에 삽입되어져 동작할 수 있는 코드.
- 인터셉터: 인터셉터 체인 방식의 AOP 툴에서 사용하는 용어로서 주로 한 개의 invoke 메쏘드를 가지는 어드바이스
4. 위빙(weaving) 또는 크로스커팅(crosscutting)
-
포인트컷에 의해서 결정된 조인포인트에 지정된 어드바이스를 삽입하는 과정. AOP의 핵심. 정적 바이트코드 변환, 실행 중 클래스로더를 통한 실시간 바이트코드 변환 그리고 다이내믹 프록시를 통한 방법까지 매우 다양한 기술이 있음.
5.
애스팩트(aspect) 또는 어드바이저(Advisor)
- 조인트포인트(어디에서)와 어드바이스(무엇을 할 것인지)를 합쳐놓은 것.
* AspectJ와 같은 자바 언어를 확장한 AOP에서는 마치 자바의 클래스처럼 애스팩트를 코드로 작성할 수 있다. AOP 툴의
종류에 따라서 어드바이스와 포인트컷을 각각 일반 자바 클래스로 작성하고 이를 결합한 어드바이저 클래스를 만들어서 사용하는 방법
대표적인 AOP 툴-
AOP는 OOP의 확장에 가깝기 때문에 OOP를 확장한 언어 확장(language extension) 또는 툴이나 프레임워크 형태로 사용할 수 있게 되어 있음.
AOP의 과제 및 전망1. 표준의 부제 -
AOP는 현재 정해진 표준이 없으며 표준을 정할 기구나 조직이 없음. 한창 커가는 시기.
2. 기존 OOP 개발자들의 저항 - weaving은 OOP의 캡슐화를 깨뜨림. 캡슐화의 필요 수준은 어디까지인가에 대한 논란 대두.
3. 전 시스템에 걸쳐 모듈을 자유롭게
삽입, 제거가 가능해지기 때문에 익숙 여하에 따라 개발 속도 대폭 향상 가능 -> XP 개발자들에게는
상당히 막강한 무기.
reference:
객체지향을 넘어 관점지향으로 AOP. ZDNet Korea
Aspect-oriented programming. Wikipedia
댓글을 달아 주세요
위 그림 어디서 많이 본거 같지 않아요? 자크만 프레임워크 함 보세요...
재미있는 연결이 가능합니다. ^^;
윗 그림과 자크만 사이에 숨겨진 연관성이 있군요!
아직 자크만 프레임워크를 정리하지 않았는데, 여기저기서 자크만을 언급하는 것으로 보아 따로 정리해둘 필요성을 느끼고 있었습니다. 빨랑 함 정리해보아야겠군요.