OOP가 객체지향 프로그래밍이라면 AOP (Aspect Oriented Programming)는 관점지향 프로그래밍이다.
OOP + DI(Dependency Injection) + AOP ==> 유연하고 견고한 시스템 개발이 가능하다고 한다. -_-... 그렇다고 한다.
내가 제대로 이해하고 있는지는 모르겠지만 AOP는 스토커 같은 놈이다
몰래 엿보고 있다가 자신의 관심사(객체)가 나타나면 그 관심사에 주위에서 뭔가 짓꺼리(?)를 하고 사라진다.
AOP에서 사용하는 용어들이 있는데 외워야 할것 같아서 적어본다.
Joinpoint
특정 작업이 실행하는 시점을 의미
예를 들자면 클래스의 인스턴스 생성시점, 메서드 호출 시점, Exception 발생 시점 등등
Advice
핵심 비지니스 로직(target)에 추가적인 처리를 하기 위한 비즈니스로직 클래스
Advice 타입 |
설명 |
Around Advice |
Joinpoint 앞과 뒤에서 실행되는 Advice |
Before Advice |
Joinpoint 앞에서 실행되는 Advice |
After Returing Advice |
Joinpoint 메서드 호출이 정상적으로 종료된 뒤에 실행되는 Advice |
After Throwing Advice |
예외가 던져질 때 실행되는 Advice |
Introduction |
클래스에 인터페이스와 구현을 추가하는 특수한 Advice |
Pointcut
하나 또는 복수의 Joinpoint를 하나로 묶은것을 Pointcut라고 함.
이 Pointcut 을 단위로 해서 Advice와 연결한다.
Weaving
분리하여 개발된 기능들을 엮어준다. 모듈을을 엮어주는 역할임
Target
핵심 비즈니스 로직을 구현한 클래스
Advisor
Advice와 Pointcut를 하나로 묶어서 다루는 것. "관점" 이라고 생각하면 됨