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

+ Recent posts