"Aspect-Oriented Programming"의 약자
소프트웨어 설계 및 프로그래밍 패러다임 중 하나다.
AOP는 애플리케이션의 핵심 비즈니스 로직과 각 기능 모듈에서의 관심사를 분리하는 것을 목표로 한다.
"관심사"는 특정 부분이나 기능을 의미하며, 이는 종종 애플리케이션의 다른 부분과 결합되어 복잡성을 증가시키곤 한다.
AOP는 이런 관심사를 분리하여, 시스템이 더욱 모듈화되고, 유지보수가 용이하며, 재사용성이 증가하도록 돕는다.
1 Aspect: 코드에서 공통적으로 나타나는 패턴이나 기능이다. 로깅, 보안, 트랜잭션 관리와 같이 여러 모듈에 걸쳐 거의 동일하게 적용되는 기능을 예로 들 수 있다.
2 Join Point: 프로그램 실행 중에, Aspect가 코드에 결합되는 (또는 "적용되는") 특정 지점이다.
3 Advice: Aspect가 어떻게 작동하고, Join Point에서 언제 실행될지를 정의하는 코드 블럭이다. Advice는 'before', 'after', 'around'와 같이, 원본 코드에 동작하는 시점에 따라 다르게 적용될 수 있다.
4 Pointcut: 어떤 Join Points에서 Advice가 실행되어야 하는지를 명시하는 표현이다. Pointcut 표현식은 여러 Join Point 중 어떤 것들이 Aspect에 의해 영향을 받을지를 결정한다.
5 Weaving: Aspect가 타겟 코드에 결합되는 과정을 의미한다. 이 과정은 컴파일 타임, 로드 타임, 또는 런타임에 발생할 수 있다.
1 코드의 모듈화: 공통 로직(로깅, 보안 등)을 한 곳에서 관리하므로, 코드의 중복이 줄고 모듈화가 향상된다.
2 유지 보수성 향상: Aspect를 수정하거나 변경하면, 그 변경이 적용되는 모든 포인트에 자동으로 반영되므로 유지 보수성이 향상된다.
3 가독성 향상: 핵심 비즈니스 로직이 다른 코드로부터 분리되어, 가독성과 이해도가 향상된다.