개발 공부

AOP (관점 지향 프로그래밍)의 쉬운예제1

준군 2020. 9. 20. 15:14

이번 글에서는 AOP(Aspect Oriented Programming)에 대해 알아보고 자바를 통해 이해를 돕기 위한 쉬운예제를 해보려고 한다. OOP (객체지향)은 객체를 만들어 서로 소통하게 하는 프로그래밍 기법이다. AOP는 그보다 더 넓은 시각으로 여러 사용자의 관점에서 필요한 기능들을 모듈화 시켜낸 프로그래밍 기법이다. 예를 들어, 웹사이트를 구축하면 일반 사용자들이 주로 사용하게 되지만, 그 외에도 관리자와 개발자도 사용하게 되며 일반 사용자들이 쓰지 않는 로그, 권한, 트랜스액션처리 등의 특별한 기능이 요구된다. 이번 글에서는 자바를 이용해 특정한 함수가 처리 되는 시간을 구하는 기능을 구현해 볼것이며 나중에는 Annotation을 이용해 똑같은 예제를 만들 예정이다. 

 

예제

 

본격적으로 예제를 시작함에 앞서, 아래의 그림은 파일구조이고 Program은 실행파일, Employee는 인터페이스 Developer는 Employee를 구현하는 클래스이다.

 

파일구조

여기서 구현하고자 하는 것은 Developer 클래스의 메소드중 하나인 setTax의 실행시간이다. 실행시간을 구하기위하여 setTax 메소드 안의 시작과 끝에 현재 시간을 구하는 System.currentTimeMillis를 쓰고 차이를 구할 것이다. Thread.sleep은 처리가 너무 짧은 시간에 끝날수 있으므로 쓰여졌다.

 

Developer 클래스의 setTax 메소드

하지만 자바에서는 Proxy를 이용해 이러한 기능들을 더욱 쉽게 구현할 수 있게 해준다. 아래의 코드는 원래 만들어져 있던 employee의 proxy 버전을 만드는 것이다. newProxyInstace는 세개의 인자를 받게 되는데, 첫번째는 proxy를 정의할 클래스, 두번째는 proxy 클래스들이 구현할 인터페이스들, 세번째는 invocateHandler 개체인데 invoke 메소드에 구현될 기능을 정의한다. 

 

proxy 이용

위와같이 getTax, getName을 실행시킴에 따라 proxy를 이용하여 구현했던 기능들이 사용됨을 볼수있다.