대충벌레 블로그
728x90
반응형
  • 이 글은 필자가 공부 정리하는 잡 글입니다.

AOP(Aspect Oriented Programming) [관점 지향 프로그래밍]

어떤 로직을 기준으로 핵심적인 관점, 공통적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화

 

  • 여러 객체에 공통으로 적용할 수 있는 기능을 분리
  • 재사용성을 높여주는 프로그래밍 기법.

[활용]

  • 메소드 실행 시 로그 기록과 같은 공통 기능을 프록시가 수행하도록 하고 메소드는 핵심 기능만 작성
  • DB연동시 공통으로 들어가는connection, close 작업을 프록시가 수행하고 각 메소드는 DB쿼리의 핵심 기능만 수행

[구현]

  1.  컴파일 시점에 코드에 공통 기능을 삽입하는 방법
  2. 클래스 로딩 시점에 바이트 코드에 공통 기능을 삽입하는 방법
  3. 런타임에 프록시 객체를 생성해서 공통 기능을 삽입하는 방법 [스프링에서 제공하는 방식]

[주요 용어]

Advice [When] 언제 공통 관심 기능을 핵심 로직에 적용할 지 정의
Joinpoint [Where] Advice를 적용할 수 있는 지점 의미. 메소드 호출이 해당
Pointcut [At] Joinpoint의 부분 집합으로 실제 Advice가 적용되는 Joinpoint
Weaving Advice를 핵심 로직 코드에 적용하는 행위
Aspect [What] 여러 객체에 공통으로 적용되는 기능

[Advice 종류(공통 기능 적용 시기)]

Before Advice 대상 객체의 메서드 호출 전
After Returning Advice 대상 객체의 메서드가 Exception 없이 실행된 이후
After Throwing Advice 대상 객체의 메서드 실행 중 Exception 발생 시
After Advice Exception 여부와 상관없이 메서드 실행 후
Around Advice 대상 객체의 메서드 실행 전,후 또는 Exception 발생 시점.

 

클래스 1, 2, 3에 공통인 코드를 각각 작성하면 3번의 반복 작업이 필요하지만

공통적인 부분은 한번만 작성하고 필요한 곳에 호출하여 사용할수 있도록 하는 개념

호출을 개발자가 할 것인지, 스프링에서 할 것인지.

 

시간 측정 하는 예시

  • Factorial을 구하는 두 개의 클래스를 만들어 시간을 측정

반복문을 이용하여 factorial을 구하는 클래스와 재귀문을 이용하여 factorial을 구하는 클래스

 

프록시(Proxy)

반응형
profile

대충벌레 블로그

@대충벌레

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!