AOP(Aspect Oriented Programming) 이란?
관점 지향 프로그래밍으로 부가기능(advice) , 즉, 코드를 동적으로 추가해 주는 기술이다.
AOP의 핵심은 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가해주는 것이다!
AOP 관련 용어
용어 | 설명 |
target | advice가 추가될 객체 |
advice | target에 동적으로 추가될 부가 기능(코드) |
join point | advice가 추가(join)될 대상(메서드) |
pointcut | join point들을 정의한 패턴 |
proxy | target에 advice가 동적으로 추가되어 생성된 객체 |
weaving | target에 advice를 추가해서 proxy를 생성하는 것 |
Advice의 종류
*Advice의 설정은 XML과 애너테이션, 두 가지 방법으로 가능
종류 | 애너테이션 | 설명 |
around advice | @Around | 메서드의 시작과 끝 부분에 추가되는 부가 기능 |
before advice | @Before | 메서드의 시작 부분에 추가되는 부가 기능 |
after advice | @After | 메서드의 끝 부분에 추가되는 부가 기능 |
after returning | @AfterReturning | 예외가 발생하지 않았을 때, 실행되는 부가 기능 |
after thrwoing | @AfterThrowing | 예외가 발생했을 때, 실행되는 부가 기능 |
코드 예시
class MyClass{
void a1(){
System.out.println("before"); // advice; 부기능
System.out.println("a1() is called); // target; 핵심 기능
System.out.println("after"); // advice; 부기능
}
void a2(){
System.out.println("before"); // advice
System.out.println("a2() is called); // target
System.out.println("after"); // advice
}
위 코드에서 보면 System.out.println("before")과 System.out.println("after") 코드가 a1과 a2에 중복 코드로 있으므로 중복 코드는 따로 만들어 주는 것이 좋다. 그리고 핵심 기능과 부기능을 분리함으로써, 관심사를 분리시켜줘야 좋은 코드라고 할 수 있다.
class MyAdvice{
void invoke(Method m, Object obj, Object... args) throws Exception{
System.out.println("before");
m.invoke(obj,args); // 메서드 호출
System.out.println("after");
따라서 위에 코드처럼 중복 코드를 따로 클래스를 만들어서 관리해 준다면 변경에 유리한 코드가 된다.
OOP, AOP 둘 다 변경에 유리한 코드를 작성하기 위해서 분리를 해주는 작업이라고 볼 수 있다.
'PROGRAMMING > SPRING' 카테고리의 다른 글
[08] Spring DI (0) | 2023.06.13 |
---|---|
[06] Exception Handling (0) | 2023.05.24 |
[05] Session (0) | 2023.05.22 |
[04] Cookie (1) | 2023.05.20 |
[03] MVC 패턴 (0) | 2023.05.17 |