객체 지향 프로그래밍 OOP(Object-Oriented Programming)는
사용자가 원하는 업무를 분석해 그에 대한 로직을 구현했었다.
이런 업무와 관련된 것과 별개로 개발자나 운영자의 관점에서의 프로그램도 필요할 것이다. (로그, 보안, 트랜잭션 처리)
따라서 이런 관점별로 분리해 모듈화 하겠다는 것이 AOP(Aspect Oriented Programming)
Primary(Core) Concern 주 업무 로직
Cross-cutting Concern 관점이 다른 로직(로그 보안 트랜잭션 등등)으로 다른 주 업무에 공통적으로 사용될 수 있는 코드들
public int total() {
long start= System.currentTimeMillis(); // 실행 시간을 체크하기 위한 Crosscutting Concern
int result = kor+eng+math+com; // 주 업무
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
long end= System.currentTimeMillis();
String message = (end-start) + "ms가 걸렸습니다.";
System.out.println(message); // 실행 시간을 체크하기 위한 Crosscutting Concern
return result;
}
두 로직을 분리하여 Cross-cutting Concern을 호출 후 Core Concern을 호출한다.
Crosscutting Concern을 어떻게 주입할 것인가에 따른 분류(Advice 메소드의 동작 시점)