OOP와 AOP, AOP의 구성 요소

시루봉로·2023년 2월 12일
0

스프링 입문

목록 보기
2/4
post-thumbnail

OOP

객체 지향 프로그래밍(OOP, Object Oriented Programming)은 말 그대로 객체를 지향하는 프로그래밍 방식이다. 객체 지향에서 말하는 객체란 프로그램 동작의 주체가 되는 요소를 의미한다. 이 객체는 실체가 명확한 것일 수도 있고, 무형의 개념일 수도 있지만, 모든 객체는 상태와 동작을 가진다.
OOP의 특징은 5가지가 있으며, 아래와 같다.

  • 캡슐화(Encapsulation): 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메서드를 하나로 묶는 것을 의미한다.
  • 정보 은닉(Information Hiding): private으로 선언한 데이터는 자기 자신을 통해서만 접근 가능하도록 한다.
  • 추상화(Abstraction): 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념이다.
  • 상속성(Inheritance): 기존 상위 클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.
  • 다형성(Polymorphism): 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 한다. 즉, 형태가 같지만 다른 기능을 하는 것을 의미한다.

AOP

관점 지향 프로그래밍(AOP, Aspect Oriented Programming)은 하나의 소프트웨어가 하나의 OOP로 설계 및 프로그래밍 되었다면 이것을 각 기능별로 모듈화해서 분리 시키는 프로그래밍 방식이다. 이때, AOP는 OOP를 대신하는 새로운 개념이 아니라, 기존 OOP를 더욱 보완하고 확장하여 OOP를 OOP답게 사용할 수 있도록 도와주는 개념이다.

AOP 도입 전까지 OOP는 객체를 재사용함에도 불구하고 필수적으로 반복되는 코드를 없앨 수는 없었다. 그러나 AOP를 도입함으로써 기능을 비지니스 로직공통 모듈로 구분한 후에 개발자의 코드 밖에서 필요한 시점에 비지니스 로직에 삽입하여 실행되도록 한다.

  • 핵심 관심(Core Concern): 각 서비스의 핵심 비즈니스 로직
  • 횡단 관심(Crosscut Concern): 공통 모듈

위 그림처럼 입출금, 이자계산, 대출 이라는 비즈니스 로직을 처리할 때, 로깅, 보안, 트랜잭션이라는 공통 모듈이 있다. AOP에서는 이 공통 모듈을 따로 빼내어 각 비즈니스 로직에 횡단으로 삽입해 주는 것이다.

이렇게 각 객체별로 처리했던 것을 각 관점별로 외부에서 접근하는 것이 AOP의 핵심이다. 즉, DI가 의존성(new)의 주입이라면, AOP는 기능(logic)의 주입이라 할 수 있다. AOP를 통해서 중복 코드 제거, 효율적인 유지 보수, 높은 생산성, 재활용성 극대화, 변화 수용 용이 등의 이점을 얻을 수 있다.

AOP의 구성 요소

  • Advice: JointPoint에서 실행되어야 하는 코드, 횡단 관심, 공통 모듈에 해당한다. 언제, 어떤 공통 모듈 기능을 핵심 로직에 적용할 지를 정의(what)하고 있다.

  • JointPoint: Advice을 삽입할 시점(when)을 의미한다. 이 개념을 더 구체적으로 설명하자면 시점은 함수를 실행 전(Before), 실행 후(After), 반환 후(AfterReturning), 예외 발생 시(AfterThrowing), 실행 전과 후(Around)로 나뉜다.

  • PointCut: JointPoint의 부분 집합으로서 실제 Advice이 적용되는 JointPoint를 나타낸다. 즉, 어떤 클래스의 어떤 함수에 삽입될 건지 위치를 나타낸다.

  • Aspect: JoinPoint(when)와 PointCut(where)를 합친 것이다. 여러 객체에 공통으로 적용되는 기능으로, 일정한 패턴을 가지는 클래스에 Advice를 적용하도록 지원할 수 있는 것이다.

  • Proxy: 횡단 관심이 핵심 관심에서 직접 실행되지 않고 대리인(Proxy)을 생성해 실행한다.

  • Weaving: Aspect(when + where) + Advice(what), Weaving을 통해 지정된 객체를 새 Proxy 객체로 생성한다. 이 과정을 도와주는 것이 AOP 툴이 하는 역할이다.

  • Target: 실질적인 비지니스 로직을 구현하는 코드, 핵심 관점에 해당한다. Advice를 받을 대상이며, 객체로 비지니스 로직을 수행하는 클래스일 수도 있지만, Proxy 객체(Object)가 될 수도 있다.


참고 자료

본 글은 아래 링크를 기반으로 정리하였습니다.

profile
안녕하세요.

0개의 댓글