aspect oriented programming
관점 지향 프로그래밍
어떤 로직 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다
핵심적인 관점 → 핵심 비즈니스 로직
부가적인 관점 → 핵심 로직을 실행하기 위해 행해지는 데이터베이스 연결, 로깅, 파일 입출력, 시간 측정 로직
모듈화 한다 → 코드들을 부분적으로 나누어서 모듈화 하겠다
소스코드상 다른 부분에 계속 반복해서 쓰는 코드 → 흩어진 관심사
흩어진 관심사를 aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 aop의 목표

위의 a,b,c 클래스에서 동일한 색깔의 선들의 의미는 비슷한 메소드, 필드, 코드를 의미
if class a 주황 update:
→ class b, class c 찾아서 update
이는 유지보수에 쉽지 않음
따라서 흩어진 관심사를 aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 aop의 목표
기본적으로 프록시 방식으로 동작
proxy??
→ 메소드 호출을 객체로 하고 어드바이스로 알려진 추가 동작을 해당 호출에 적용하는 중개자
| AOP | OOP | |
|---|---|---|
| 측면 | 관점지향 | 객체지향 |
| 장점 | OOP 단점 극뽁핵심기능에서 부가기능을 분리함으로써 핵심기능 설계, 구현시 객체지향적 갈치를 지킬 수 있게 해줌 | 객체 재사용을 통해 반복되는 코드 줄임 |
| 단점 | 1. 재사용임에도 반복되는 코드 감소에 역부족2. 핵심기능과 부가기능을 분리해 모듈화하는 작업이 어려움3. 반복되는 코드 : 로그, 권한체크, 인증, 예외처리 등등 필수적 소스코드들 | |
| 극뽁방법 | AOP 사용 | |
| 이론 | 여러군데 사용되는 중복 코드 : AOP의 aspect Aspect : 부가기능 Advice : 부가기능를 정의한 코드(실질적 어떤일 해야할지)PointCut : Advice를 어디에 적용할지 결정(대상결정)Aspect = Advice + PointCutTarget : 핵심 기능을 담고 있는 모듈, Aspect를 적용하는 곳(클래스, 메서드) | |
| 특징 | 1. 프록시 패턴 기반 - 타겟 객체에 대한 프록시를 만들어서 제공 2. 프록시가 호출을 가로챔 3. 메서드 조인 포인트만 지원! |
