AOP란 Aspect Object Programming의 약자로 관점 지향 프로그래밍이라고 한다. 객체 지향 프로그래밍의 보완성으로 나온 프로그래밍방식이라합니다. 어떻게 보면 객체 지향의 상위 호완이라 생각할 수 있겠지만, 그거는 설명하기 귀찮기때문에 넘어가자. 여기에 서로 다른 클래스가 존재한다. 3개의 클래스안에는 공통적인 기능이 존재한다. 공통적인 기능이 존재해도 3개의 클래스 모두 같은 기능을 추가해야한다. 물론, 리펙토링을 통해 이것을 처리할 수 있겠지만, 애초에 리펙토링 자체도 코드 한줄을 입력해야 되는 것이기 때문에 어떻게 보면 3개의 기능을 추가한다는 건 다르지 않는다. 그러면 관점을 조금만 바꿔서 생각해보자. 만약에 클래스가 시작할때, 클래스가 종료될때 로그를 찍히게 만들 수 있게 한다면..