AOP

유수민·2022년 7월 10일
0

지식창고

목록 보기
2/64

📌AOP란?

Aop는 Aspect-Oriented Programming의 약어로 관점 지향 프로그래밍을 의미한다. OOP를 보완하는 수단으로 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법이다.
만약 AOP를 처음 보는 사람이 AOP에 대해 물어본다면, 나는 그냥 쉽게 “프로그램 구조를 바라보는 관점(Aspect)을 바꿔주는 기법이야!” 라고 말해주고 싶다. 기존의 OOP 즉, 객체 지향 프로그래밍은 설계를 할때, 각각의 역활에 따라 클래스를 분리하였다.

📖AOP에 대한 비유

음.. 비유를 들자면, 대학교의 각 학과를 클래스라 생각하면, 컴퓨터 공학과, 전자공학과,법학과 등등 다양한 클래스들이 존재하는다. 이것을 OOP가 추구하는 방향이라면, AOP는 각 학과에는 공통적으로 회장, 부회장 등을 하는 사람이 공통적으로 존재합니다. 어느 학과에 있던 회장과 부회장의 역활은 똑같다는 거다. 이것이 AOP가 학교를 바라보는 관점이라고 생각하면 된다. 즉, AOP는 공통된 요소를 추출하는 것이라고도 할 수 있다. 이해를 돕기 위해 아래 그림을 내가 그려보았다.

📖OOP vs AOP

이제 프로그래밍 세상에서 OOP와 AOP를 구분지어 밑에 정리해보면.

  • OOP : 비지니스 로직의 모듈화

    • 모듈화의 핵심 단위는 비지니스 로직
  • AOP : 인프라 혹은 부가기능의 모듈화

    • 대표적 예 : 로깅, 트랜잭션, 보안 등
    • 각각의 모듈들의 주 목적 외에 필요한 부가적인 기능들

프로그래밍을 하다보면 공통적인 기능이 많이 발생한다. 이러한 공통 기능을 모든 모듈에 적용하기 위해 OOP에서는 상속을 이용한다. 하지만 Java에서는 다중 상속이 불가능하며, 상속을 받아 공통 기능을 부여하기에는 한계가 있다. 이를 해결하기 위해 AOP가 등장하게 된 것이다.

📖AOP의 효과는

  • 모듈 전체에 흩어진 공통 기능이 하나의 장소에서 관리할 수 있다.
  • 다른 서비스 모듈들이 본인의 목적에만 충실하고 그외 사항들은 신경쓰지 않아도 된다.
  • 중복 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용 용이의 이점이 발생한다.

Spring의 핵심 개념중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춰준다면, AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것이다. 하지만, 공통적인 기능을 재사용 한다는 것이 AOP의 기능이어서 만약 공통적인 기능 중 하나가 잘못되면 전체에 다 영향을 미친다는 단점이 존재한다.

profile
배우는 것이 즐겁다!

0개의 댓글