공통/기타

AOP란? 횡단 관심사? 흩어진 관심사?

반응형

AOP가 뭐지?

AOP는 Aspect Oriented Programming, 즉 관점 지향 프로그래밍이란, 횡단 관심사(흩어진 관심사)(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다.


횡단 관심사 (흩어진 관심사)가 뭐지?

여기서 먼저 횡단 관심사란 무엇일까요?

이를 이해하기 위해서 두 가지 helloA(), helloB() 샘플 메소드를 봅시다.

public void helloA() {
        System.out.println("Start......");
        AAA();
        System.out.println("End......");
}
public void helloB() {
        System.out.println("Start......");
        BBB();
        System.out.println("End......");
}

요 두개의 메소드를 보면 중복된 로직이 보이지 않나요?

바로 아래 처럼 서로 다른 코드를 사이에 두고 앞 뒤에 Start, End를 출력하는 코드가 앞 뒤에 위치하고 있습니다.

System.out.println("Start......");

// 서로 다른 부분

System.out.println("End......");

뭐 있을 수도 있지 않을까요?

만약에 시작과 끝을 한글로 출력하게끔 요구사항이 변경되었다고 가정해보자

하나하나 변경해줍시다 ^^

public void helloA() {
        System.out.println("시작......");
        AAA();
        System.out.println("끝......");
}

ㅎㅎㅎ 또 바꿔야하네 ^^

public void helloB() {
        System.out.println("시작......");
        BBB();
        System.out.println("후......");
}

만약 메소드가 100개라면?

⇒ 후.....


횡단 관심사 정리

이렇게 핵심 적인 기능이 아닌 중간중간 삽입되어야 할 기능들 관심들을 횡단관심사(Corsscutting Concerns)이라고 한다.

예를 들면 로깅, 보안, 트랜잭션 처리 등 비즈니스 핵심적인 기능이 아닌 다양한 횡단 관심이 발생할 수 있다.


그럼 다시 AOP란?

AOP는 Aspect Oriented Programming, 즉 관점 지향 프로그래밍이란, 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임입니다.

즉 소스코드 상에서 각각의 관점을 핵심적인 관점과, 부가적인 관점으로 나누어보고 그 관점을 기준으로 각각 분리하는 것을 의미한다.


AOP 주요 개념

  • Aspect: 횡단 관심사를 모듈화 한 것을 의미하며, Advice + PointCut을 합친 개념
  • Target: Aspect를 적용하는 곳, 즉 부가 기능을 적용할 대상
  • Advice: 각 관심사가 하는 실제 부가기능을 담은 구현체
  • JoinPoint: Advice를 적용 가능한 지점.
  • PointCut: JoinPoint의 부분 집합으로 실제 Advice가 적용되는 JoinPoint를 나타냄.
반응형

'공통 > 기타' 카테고리의 다른 글

함수형 프로그래밍이란?  (0) 2021.07.21
객체 지향? 객체 지향의 특성  (0) 2021.05.17
링커와 로더  (0) 2021.04.02
SOLID 원칙이란?  (0) 2021.03.18