AOP(Aspect Oriented Programming)는 관점지향프로그래밍이라고 불린다. 관점지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.
핵심적인 관점은 핵심 비즈니스 로직을 의미하고 부가적인 관점은 핵심로직을 실행하기 위해 행해지는 DB연결, 로깅, 예외처리 등이 있다. 소스코드 상에서 다른 부분에 반복해서 쓰는 코드들이 있는데 이것을 흩어진 관심사라고 부른다. 여기서 이 흩어진 관심하를 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지이다.
AOP의 주요 개념
- Aspect : 흩어진 관심사를 모듈화 한 것 (부가기능을 모듈화 한 것)
- Target : Aspect를 적용하는 곳(클래스, 메서드...) [부가기능을 부여할 대상]
- Advice : 실질적으로 부가기능을 담은 구현체 / Advice는 Aspect가 무엇을 언제 할지를 정의한다.
- JoinPoint : Advice가 적용될 수 있는 위치
- PointCut : JoinPoint의 상세한 스펙을 정의하여 선별 / 구체적으로 Advice가 실행될 지점을 정함 (ex : A라는 메서드의 진입 시점에 호출할 것)
- Proxy : 타겟을 감싸서 타겟의 요청을 대신 받아주는 랩핑 오브젝트
- Introduction : 타겟 클래스에 코드 변경없이 신규 메소드나 멤버변수를 추가하는 기능
- Weaving : 지정된 객체에 애스팩트를 적용해서 새로운 프록시 객체를 생성하는 과정