Aspect Oriented Programming(AOP)
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고
그 관점을 기준으로 각각 모듈화하겠다는 것
*모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
EX)
- 핵심적인 관점 : 우리가 적용하고자 하는 핵심비지니스 로직
- 부가적인 관점: 핵심로직을 실행하기 위해서 행해지는 DB연결, 로깅, 파일 입출력 등
- 위 A,B,C 클래스에서 동일한 색의 선들의 의미는 클래스들에 나타나는 중복되는(비슷한) 메소드, 필드, 코드들이 나타난다는 것
- 이러한 경우 만약 클래스 A에 주황색 부분을 수정해야 한다면 B,C클래스들에 주황색 부분에 해당하는 곳을 찾아가 전부 코드를 수정해야함
- 이런식으로 반복되는 코드를 흩어진 관심사(Crosscutting Concrens)라고 부름
- 이렇게 흩어진 관심사를 AOP는 Aspect를 이용해서 해결
- 위의 사진의 아래쪽을 보면 흩어져 있는 부분들을 Aspect를 이용해서 모듈화시킨 것을 볼 수있음
- 개발자가 모듈화 시킨 Aspect를 사진에서 위에 클래스에 어느 곳에 사용해야 하는지만 정의해주면 됨
☞ 결론적으로 Aspect로 모듈화하고 핵심적인 비지니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지
주요 키워드
Aspect | 여러 곳에서 쓰이는 공통 부분 코드를 모듈화한 것 |
Target | Aspect가 적용되는 곳 (class,method) |
Advice | - Aspect에서 실질적인 기능에 대한 구현체 - 어떤 일을 해야할 지에 대한 것, 해야할 일들에 대한 정보를 가짐 - 메소드 호출 전/후, Exception 발생할 때, 메소드 호출 후 반환되기 전 |
Join Point | - Advice가 Target에 적용되는 시점 - 메소드 진입할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때 등 - spring에선 메소드 실행 시점을 의미 |
Point cut | Join Point의 상세스펙을 정의한 것 |
Proxy | - 클라이언트와 타겟사이에 투명하게 존재하며 부가기능을 제공하는 object - DI를 통해 타겟 대신 클라이언트에게 주입되며 클라이언트의 메소드 호출을 대신 받아서 타겟에 위임하며 이 과정에서 부가 기능을 부여 |
'JAVA' 카테고리의 다른 글
[Spring] @requestBody 와 @responseBody 차이점 (0) | 2022.09.19 |
---|---|
[Spring] Spring Interceptor (스프링 인터셉터) (0) | 2022.09.04 |
[Spring] Spring MVC 란? (2) | 2022.09.01 |
[Spring] DispatcherServlet 개념 (0) | 2022.08.29 |
[Spring] @Annotation 어노테이션이 무엇인가? (0) | 2022.08.26 |
댓글