: AOP는 Java의 OOP(Object Oriented Programming) 객체지향 프로그래밍이라는 단어와 앞 단어만 다르다.
AOP는 Java의 OOP를 대신해서 새로 생긴 개념이 아니라, OOP를 더욱 OOP답게 사용할 수 있게 도와준다.
OOP인 Java는 객체를 재사용함으로써 반복되는 코드의 양을 굉장히 많이 줄일수가 있었다.
그렇지만, 객체의 재사용에도 불구하고 반복되는 코드를 없앨 수 없었는데, 로그, 권한 체크, 인증, 예외 처리 등 필수적으로 해야하기 때문에 소스에서 반복될 수 밖에 없는 부분도 있다.
AOP는 이러한 문제를 해결해준다.
먼저 OOP의 흐름은
이와 같은 코드로 반복적으로 삽입될 수 밖에 없다.
하지만, AOP는 이런 관심을 종단으로 삽입할 수 있도록 해준다.
기존의 프로그래밍에서 각 객체별로 처리했던 것을 각 관점별로 외부에서 접근하는 것이 AOP의 핵심이다.
구현하고자 하는 횡단 관심사의 기능을 의미한다. 한개 이상의 포인트컷과 어드바이스의 조합으로 만들어진다.
※ 함께 사용합니다!
관점(Aspect)를 삽입하여 어드바이스가 적용될 수 있는 위치를 말한다.
관점(Aspect)의 구현체로 조인 포인트에 삽입되어 동작하는 코드이다.
어드바이스는 조인포인트와 결합하여 동작하는 시점에 따라 5개로 구분된다.
Before Advice : 조인포인트 전에 실행되는 advice
After returning advice : 조인포인트에서 성공적으로 리턴 된 후 실행되는 advice
After throwing advice : 예외가 발생하였을 경우 실행되는 advice
After advice : 조인포인트에서 메서드의 실행결과에 상관없이 무조건 실행되는 advice, 자바의 finally와 비슷한 역할을 한다.
Around advice : 조인포인트의 전 과정(전, 후)에 수행되는 advice
어드바이스를 적용할 조인 포인트를 선별하는 과정이나 그 기능을 정의한 모듈을 의미한다. 패턴매칭을 이용하여 어떤 조인포인트를 사용할 것인지 결정한다.
즉, 어드바이스를 적용할 조인포인트를 선별하는 기능을 정의한 모듈을 얘기합니다.
어드바이스를 받을 대상, 즉 객체를 의미한다. 비지니스로직을 수행하는 클래스일수도 있지만, 프록시 객체(Object)가 될 수도 있다.