AOP

반응형
반응형

AOP란 
Aspect Object Programming의 약자로 관점 지향 프로그래밍이라고 한다.

객체 지향 프로그래밍의 보완성으로 나온 프로그래밍방식이라합니다.
어떻게 보면 객체 지향의 상위 호완이라 생각할 수 있겠지만, 그거는 설명하기 귀찮기때문에 넘어가자.

여기에 서로 다른 클래스가 존재한다.

3개의 클래스안에는 공통적인 기능이 존재한다.
공통적인 기능이 존재해도  3개의 클래스 모두 같은 기능을 추가해야한다.
물론, 리펙토링을 통해 이것을 처리할 수 있겠지만, 애초에 리펙토링 자체도 코드 한줄을 입력해야 되는 것이기 때문에
어떻게 보면 3개의 기능을 추가한다는 건 다르지 않는다.

그러면 관점을 조금만 바꿔서 생각해보자.
만약에 클래스가 시작할때, 클래스가 종료될때 로그를 찍히게 만들 수 있게 한다면,
기능 3개를 따로 만들 필요는 없어진다.
왜냐하면 클래스가 시작될때, 클래스가 종료될때 로그가 찍히게 되기 때문이다.
이것이 바로 AOP다.
AOP의 구현체로는 2가지가 있다는데 사실 여기에서는 딱히 중요한 내용이 아니므로 넘어가자.

이것이 로그를 리펙토링 방식?으로 작성된 방법이고

이것이 AOP방식으로 작성된 방법이다.
참고로 Demon Class는 실제 존재하는 용어는 아니고 가상의 클래스라는 의미에서 내가 만든 용어다. 
물론 프록시나 버츄얼같은 용어를 사용할 수 도 있겠지만 그거까지는 잘 모르겠다.(중요한게 아니니 넘어가지 실제 존재하는 용어도 아니구)
모듈이라는 용어를 사용하는 구나.;

여기서 주목해야 되는 점은 로그는 클래스가 시작이 될때, 종료될때 생성이 되어진다는 것을 알 수 있다.
그리고 검정색 화살표를 살펴보면 각각의 클래스로 전달이 되는 것을 알 수 있는데 이것이 바로 해당 기능(로그)이 사용되는 부분이라 할 수 있다.

그러면 이제 AOP에서는 어떤 용어를 사용하고 있는지 확인해 보자.
용어는 
advice, pointcut, joinPoint등이 존재한다.

아 또 날라갔네 
에이 대충 작성하자.
advice는 조언이라는 뜻을 가졌고 어떤 것을 적용할지 말하는 것이다.
결국은 여기서 advice는 로그를 말한다.

pointcut은 joinPoint가 필터링 된것이라고 한다.
그렇기 때문에 그냥 넘어가자.

joinPoint는 어디에 작성이 되는지 말하는 것으로
여기에서는 로그에 어디에 찍히는지 말하는 것이다.

나무를 보지 말고 숲을 보라는 이야기가 있다.
여기에서 숲은 객체 지향이고
나무는 관점 지향이라 비유 할 수  있을 것 같다.

길었는데 대충 작성하느라..;;

반응형

댓글

Designed by JB FACTORY