1. AOP (Aspect Oriented Programming)
핵심 기능이 아닌 부가 기능적인 관점에서 보았을 때 여러 곳에서 쓰이는 공통된 요소(Aspect)들을 추출(Cross-Cutting)하여 모듈화하는 기법으로 유지보수 및 재사용에 용이한 방법론
OOP : 비지니스 로직의 모듈화 (하나의 기능을 수행하는 객체를 위한 방법론)
AOP : 인프라 혹은 부가기능의 모듈화 (여러 객체를 위한 공통 기능을 제공하는 방법론)
- 대표적인 예 : 로깅, 트랜잭션, 보안 등
- 각각의 모듈들의 주 목적 외에 필요한 부가적인 기능들
2. AOP 용어
타겟 (Target)
- 부가기능을 부여할 대상을 의미
애스펙트 (Aspect)
- 타겟에 부가되는 공통적인 기능
프록시 (Proxy)
- 타겟을 감싸서 타겟의 요청을 대신 받아주는 랩핑(Wrapping) 오브젝트이며 타겟을 호출하게 되면 타겟이 아닌 프록시가 호출되어, 타겟 메소드 실행전에 전처리, 타겟 메소드 실행, 후처리를 실행
3. AOP 사용 전
long start = System.currentTimeMillis(); // 부가기능
int result = this.kor + this.eng + this.math; // 핵심기능
Thread.sleep(200); // 부가기능
long end = System.currentTimeMillis(); // 부가기능
System.out.println(end - start); // 부가기능
return result;
4. Proxy 클래스
① 메인 프로그램에서 실제 객체가 아닌 Proxy 호출
② Proxy 에서 부가 기능 수행
③ Proxy 에서 실제 객체의 메서드 호출 (invoke() 메서드 내에서 method.invoke () 메서드 수행)
④ 실제 객체의 메서드가 수행 완료되면 제어권이 다시 Proxy 에게 넘겨지고 나머지 부가 기능 수행
1. Proxy 구현
2. Proxy.newProxyInstance
① ClassLoader loader - 프록시 객체가 대신하게 될 실제 객체를 클래스 로더를 통해 지정
② Class<?>[] interfaces - 프록시 객체가 대신하게 될 실제 객체가 구현하고 있는 인터페이스(들)
③ InvocationHandler h - 실제 객체를 대신해서 수행하게 될 부가기능 + 실제 객체 호출 부분
3. invoke 메서드
① Object proxy - Proxy 객체 자기 자신
② Method method - 실제로 호출될 메서드의 메타데이터
③ Object[] args - 실제로 호출될 메서드에 넘겨질 인자(들)