Spring/Spring_CoreTechnologies

SpringFrameWork CoreTechnition_section5_12부

whyWhale 2020. 11. 24.

AOP

 

AOP의 개념

  • Aspect-Oriented Programming의 약자이다.
  • 흩어진 Aspect들을 모아서 모듈화 하는 기법이다.
  • AOP는 OOP를 보완하는 수단이다.(대체하는 것이 아니고 OOP를 좀 더 잘하게 끔 하는 것이다)
  • 여러가지의 구현체들이 존재하지만 AspectJ와 SpringAop가 대표적이다.

 

 

빨강색,파랑색,노랑색은 각 클래스 안에 있는 '관심사' 라고 표현합니다.

 

관심사란 => 비슷한 코드들을 의미한다.

ex) 필드 또는 메소드 등과 같은 것들 이다. 

    Transacion , Logging 사용.

 

각 클래스에 중복되는 부분이 있으면! 중복을 제거하기 위해 AOP를 적용하게 된다.

 

class A,B,C 에 중복된 관심사들을 깔끔하게 정리한다.

AOP 의 주용 개념(용어정리)

  • Aspect와 target

Aspect : 해야할 일(관심사)과 어디에(클래스A?,B?,C?)적용하는지를 묶어서 모듈화 한 것.

PointCut : (클래스A?,B?,C?)어느클래스에적용할지를담고있는정보들의묶음.

Target : 적용대상 ((클래스A?,B?,C?)안에 구체적으로 어디에 적용할지 생성자 전? 생성자 후? 특정 메소드 호출 전? 후?)

Advice : 할일(관심사).

Join Point : 어느 시점에서 끼어넣는 것으로 지점을 의미.(흔히 메소드 실행 시점에 끼워 넣는다.) 합류점

  +구체적인 subset 

     ex) 생성자 호출전이나 필드 접근적이나 등등...

         A class에 'B'라는 메소드 호출시 적용해라-> pointCut

 

AOP의 구현체

  •  여러가지의 구현체가 있다.
  •  대표적으로 AspectJ 와 스프링AOP가 있다.
  •  이 둘은 다르다.

 +AspectJ 는 다양한 기능 그리고 Joint Point를 제공.

  스프링AOP 는 국한적으로 제공하다는 점에서 다르다.

 

 

AOP의 적용방법

 

컴파일 : 컴파일하는 시점 바이트코드에 이미 다들어가 있는 상태이다.(AspectJ사용)

           +생성부하가 발생하지 않지만 별도의 컴파일이 필요하다.

 

로드타입 : 순순한 compile을 로딩하는 시점에서 적용하는 방식으로 

              +로딩하는 시점에서 부하가 발생할 수 있고 로드타임위버를 설정해야한다(자바에이전트) 하지만 다양한 문                  법을 제공하므로 편리하다.(AspectJ사용)

 

런타임 : Class type의 Bean 을 만들때 class에 감싸는 Proxy(대리자,대체자,중계기) 빈을 만들어서 실제 가지고 있는              메소드 직전에  실행하는  것이다.  (가장 현실적이고 합리적인 방법)

          + 스프링 AOP의 사용방법을 가지고 있으며 초기 Bean을 만드는 부하가 있고 로드타암위버에 대한 비용과 비               슷한 비용이 들지만 아무런 설정이 필요없고 깊은 학습을 필요로 하지 않으며 다양한 문법사용에 용이하다.

 

 

AOP에 다시 정리하자면, OOP를 보완하는 수단이며 CrossCutting(흩어져있는) 되어있는 여러 Concern(관심사)들을 모아 놓은 것으로 Aspect라는 모듈화 기법을 사용하는 프로그래밍 기법이다.

 

 

댓글