관점 지향 프로그래밍, AOP(Aspect Oriented Programming)
흔히, Java는 객체 지향 프로그래밍이 성격을 가진다고들 말한다.
이 말은 객체를 위주로 고려하는 프로그래밍을 한다는 것이다.
관점 지향 프로그래밍을 대입해보면 관점을 위주로 고려하는 프로그래밍이다.
여기서 말하는 관점이란 기능적인 시점에서 핵심 기능과 부가 기능으로 나누는 기준점이다.
예를 들어, 식당에 갔다고 생각을 해보자.
주방 직원에겐 요리가 핵심이고, 계산이 부가적인 기능이다.
서빙 직원에겐 서빙이 핵심이고, 계산이 부가적인 기능이다.
주차장 직원에겐 주차 안내가 핵심이고, 계산이 부가적인 기능이다.
결국, 계산이라는 부가적인 기능만을 묶어서 한번에 실행시킨다면 효율성이 높아질 것이다.
이것이 바로 AOP이다.
공통적으로 가지고 있는 기능(보통 Cross cutting이라고 한다)을 묶어서(모듈화) 재사용 하겠다는 것이 AOP의 취지이다.
위 그림에서 각 클래스마다 공통된 기능들을 묶어서 Aspect가 등장하는데
이들이 기존 클래스에서 분리되어서 기존 클래스의 크기는 줄고 속도는 빨라지게 된다.
또한 부가 기능에 신경을 쓰지 않고 오로지 자신의 핵심 기능에만 집중할 수 있게 된다.