반응형
AOP(Aspect Oriented Programming)
AOP(Aspect Oriented Programming)
→ 여러 오브젝트에 나타나는 공통적인 부가 기능을 모듈화하여 재사용하는 기법
또한 관심사의 분리(기능의 분리), 핵심적인 기능에서 부가적인 기능을 분리하므로
핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬수 있도록 도와주는 개념입니다
→ OOP를 보완한다
AOP를 사용하는 이유
- 공통 관심 사항을 핵심 관심사항으로부터 분리
- 그에 따라 코드의 가독성, 유지보수성 및 생산성 증가
- 각 모듈에 수정이 필요하면 다른 모듈의 수정 없이 해당 로직만 변경
- 공통 로직을 적용할 대상을 선택 가능

부가기능(인프라 로직)
- 부가기능을 Aspect 또는 advice로 정의함
- 중복코드를 만들어낼 가능성 때문에 유지보수가 힘들어짐
- 비즈니스 로직과 함께 있으면 비즈니스 로직을 이해하기 어려워짐
→ 그래서 분리가 필요
AOP 용어
용어설명
target | advice가 추가될 객체 |
advice | targer에 동적으로 추가될 부가 기능(코드) |
join point | advice가 추가(join)될 대상(메서드) |
pointcut | join point들을 정의한 패턴 |
proxy | target에 advice가 동적으로 추가되어 생성된 객체 |
weaving | target에 advice를 추가해서 proxy를 생성하는 것 |
Advice 종류
kind | Annotation | desc |
around advice | @Around | 메서드의 시작과 끝 부분에 추가되는 부가 기능 |
before advice | @Before | 메서드의 시작 부분에 추가되는 부가 기능 |
after advice | @After | 메서드의 끝 부분에 추가되는 부가기능 |
after returing | @AfterReturing | 예외가 발생하지 않았을 때, 실행되는 부가 기능 |
after throwing | @AfterThrowing | 예외가 발생했을 때, 실행되는 부가 기능 |
반응형
'Programming > Java, Spring' 카테고리의 다른 글
[Spring] Lombok이란? / Lombok의 사용 이유 / Lombok의 단점 / Lombok 사용법 (0) | 2022.10.14 |
---|---|
[Spring boot] 스프링 부트란??? (0) | 2022.10.12 |
[Spring] DI / IOC란? / 의존성을 주입하는 방법 (0) | 2022.10.11 |
[Spring] POJO란? / POJO vs Java Beans (0) | 2022.10.10 |
[JAVA]람다식이란? / 람다식의 특징 / Lambda Expression (0) | 2022.09.25 |