- AOP 관계지향2024년 12월 24일
- imaginaring
- 작성자
- 2024.12.24.:28
관계지향이라는 말이 처음에는 이해가 안되서.. (
절차면 절차, 객체면 객체지향이지 무슨 관계지향..? 관심법인가?)쉽게 설명을 하자면
식당의 요리사는 요리만 전담하지만 식당이 운영되기 위해서는 꼭 해야되는 청소, 뒷정리, 계산, 주문 내역확인 등이 있는데, 요리사 본연의 업무와는 상관없지만 식당이 굴러가기 위해선는 꼭 필요한 일이다.
이런 일들을 공통관심사 라고 하고, 이들을 따로 담당하는 사람이 있다면 요리사는 요리에만 집중 할 수 있다
"AOP는 이러한 공통관심사 (청소, 계산 등)을 코드에서 분리하여 따로 관리하도록 돕는 프로그래밍 방식"
동작원리
"공통 기능"을 특정지점(메소드 실행 전, 후 등)에 자동으로 실행시킴
AOP 적용X 예시
@Service public class MyService { public void processOrder() { System.out.println("주문을 처리 중..."); } } // 주문 처리 로직만 포함하고 있다.. // 나는 주문 처리 전후로 로그를 남기고 싶다 // 로그 기능을 직접 추가 @Service public class MyService { public void processOrder() { System.out.println("로그: processOrder 메서드 실행 시작"); System.out.println("주문을 처리 중..."); System.out.println("로그: processOrder 메서드 실행 완료"); } } // 모든 메소드에 이런 로그를 넣어야 해??
AOP 적용 예시
@Aspect // 공통 기능 정의 @Component public class LoggingAspect { @Before("execution(* com.example.service.MyService.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("로그: " + joinPoint.getSignature() + " 메서드 실행 시작"); } @After("execution(* com.example.service.MyService.*(..))") public void logAfter(JoinPoint joinPoint) { System.out.println("로그: " + joinPoint.getSignature() + " 메서드 실행 완료"); } } // ProcessOrder 메소드가 실행될 때마다 로그가 자동으로 추가됨
개념들
- Aspect : 공통 기능을 정의한 모듈(클래스)
- Advice : 실제로 실행될 공통 기능 동작 정의
- Before : 메소드 실행 전 실행
- After : 메소드 실행 후 실행
- Around : 메소드 실행 전후 또는 중간에 실행
- AfterReturning : 메소드가 정상적으로 실행 된 후 실행
- AfterThrowning : 메소드에서 예외가 발생한 후 실행
- JointPoint : Advice가 적용될 수 있는 지접 (메소드 호출 등)
- Pointcut : Advice가 적용될 구체적인 조건 정의
다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)