AOP란?

dalBeen·2023년 9월 13일
0

스프링

목록 보기
1/14

인강을 듣던 객체지향에 대해서 공부하던 AOP라는 말이 계속 나오는데... 간단하게 설명해주셔서 이해가 잘 안되어 정리해본다.

Aop?

핵심로직과 부가기능을 분리하여 애플리케이션 전체에 결처 사용되는 부가기능을 모듈화하여 재사용할 수 있도록 지원하는 것

예를 들자면

class UserService{
	void before(){}
    void getUser(){}
    void after(){}
}

class OrderService{
	void before(){}
    void getOrder(){}
    void after(){}
}

각각의 Service의 핵심기능에서 바라보았을때 User와 Order는 공통된 요소가 없다. 하지만 부가기능 관점에서 바라보면 before와 after라는 메서드가 공통된 것을 확인할 수 있다.

기존 OOP에서 바라보던 관점과 다르게 부가기능적인 측면에서 보았을때 공통된 요소를 추출하자는 것

  • OOP : 비지니스 로직 모듈화
    -> 모듈화 핵심단위는 비지니스 로직
  • AOP : 인프라 혹은 부가기능의 모듈화
    -> ex) 모니터링 / 로깅 / 동기화 / 오류검사.처리/ 성능 최적화(캐싱)등
    -> 주 목적외에 필요한 부가적 기능

즉 전체 애플레케이션에서 여러곳에서 사용되는 부가기능들은 상속, 위임 처리하기에는 깔끔한 모듈화가 어렵기때문에 AOP 등장


AOP 장점

  • 애플리케이션 전체에 흩어진 공통기능이 하나의 장소에 관리되어 유지보수가 좋음
  • 핵심로직과 부가기능의 명확한 분리로, 핵심로직은 자신의 목적외에 사항들에는 신경쓰지 않는다

AOP 주요개념

  1. Aspect : 프로그램의 여러부분에 걸쳐 나타나는 관심심사 또는 특정한 기능을 나타냄 (로깅, 트랜젝션 관리, 보안등)

  2. Join Point : Aspect가 코드에 적용될 수 있는 지점을 의미. 예를들어 메서드 호출이나 객체 생성시점등이 될 수 있음

  3. Advice : Aspect의 특정작업을 수행하는 코드조각 (특정 Join Point에서 실행됨)

  4. Pointcut : 어떤 Join Points에서 Advice를 실행할 것인지를 정의

  5. Weaving : Aspect를 애플리케이션 코드에 결합하는 과정. 위빙은 컴파일 시간, 로드시간,런타임중에 언제든지 발생가능


AOP와 OOP에 대해서

OOP (Object-Oriented Programming)는 프로그래밍의 주요 패러다임 중 하나로, 객체와 클래스를 중심으로 프로그래밍하는 방식입니다. OOP의 주요 목적은 재사용성, 확장성, 유지보수성 등을 향상시키기 위한 것입니다.

AOP는 OOP를 보완하는 패러다임으로 볼 수 있습니다. OOP에서는 객체나 클래스를 중심으로 모듈화하는 반면, AOP에서는 특정 관심사나 측면을 중심으로 모듈화합니다.

즉, AOP는 OOP의 한계를 극복하기 위해 등장한 패러다임으로, 두 패러다임은 서로 보완적인 관계에 있습니다. AOP를 통해 OOP로 작성된 코드의 모듈성과 관심사의 분리를 더욱 향상시킬 수 있습니다.

profile
깊게 공부해보자

0개의 댓글