2009년 12월 13일 일요일

AOP(aspect-oriented programming) 개념-1

근래에 들어 AOP(aspect-oriented programming)에 관한 내용을 많이 접하고 있을 것이다. 아니 이미 익숙한 용어가 되어져 있는 것 같다.


과거에 프로그램을 개발하다 보면 주요 로직 외에도 로깅(logging), 권한 등등의 처리를 위해서 각 업무상의 주요 로직 내에 해당 기능을 추가로 수행하기 위한 코드가 삽입되어져 왔었다.
애플리케이션 내의 여러 부분에 걸쳐 있는 기능을 시스템 공통 기능이라 보고, 이를 가리켜서 AOP 용어로는 횡단관심사(cross-cutting concerns)라고도 한다.
횡단관심사는 한 애플리케이션에서 여러 부분에 영향을 주는 기능이라고 할 수 있다.
아래의 그림처럼 특정 클래스 내의 메소드 내부에 시스템 공통 기능을 수행할 수 있는 메소드 호출들을 함으로써 주요 업무로직 외에 공통 기능도 추가됨으로써 개발자의 코드 작성 및 유지보수가 어렵웠었다.







이러한 부분을 개선하기위한 방법으로 나타난 AOP는 클래스의 상속 및 위임을 통해서 구현하지 못하는 영역들을 아주 자연스럽게 해결해주는 방법이 아닐 수 없었다.
Aspect 지향 프로그래밍(AOP: aspect-oriented programming)은 이러한 횡단 관심사를 애플리케이션의 업무 로직과는 분리하기 위한 것이다. AOP의 목적은 횡단관심사와 이에 영향을 받는 객체간의 결합도를 떨어뜨리기 위해 횡단관심사를 모듈화 하는데 있다.
즉, AOP에서는 횡단관심사를 Aspect라는 특별한 객체로 모듈화 하며, AOP가 다른 기법과 달리 차별화 되는 장점은 2가지가 있다.

  1. 전체 코드 베이스에 흩어져 있는 관심사항이 하나의 장소로 응집
  2. 서비스 모듈이 자신의 주요 관심사항(또는 핵심기능, 업모로직 등)에 대한 코드만 포함하고 그 외의 관심사항은 모두 Aspect로 옮겨져서 코드가 깔끔해짐

이러한 AOP의 여러 장점들로 인해 주목을 받고 있으며, OOP에서 구현하지 못하는 아니 구현하기 힘든 사항들을 보완하는 하나의 기술로 보면 될 것 같다.

댓글 없음:

댓글 쓰기