AOP란?

Aspect Oriented Programming

관점 지향 프로그래밍. 공통 관심 사항과 핵심 관심 사항을 분리시키는 프로그래밍 기법

도입 배경

객체지향 프로그래밍의 한계때문이다. 객체 간 협력과 상호 작용은 좋지만 많은 코드의 반복과 관심사 분리의 어려움이 있었다.

흩어진 관심사로 인해 중복 코드가 발생하게 되고, 유지보수의 복잡도도 증가하게 된 것. 그러한 여러 중복 코드들을 해당 메서드의 핵심로직이라고 할 수 없는 부가 기능 즉 흩어진 관심사로 보고 이를 모듈화하는 것을 목표로 하게되었다. 그래서 흩어진 관심사들을 모아 중앙화 시키고자 하는 움직임이 일어났다.

여기에서 부가 기능(비본질적인 코드라고도 한다.)이라고 하는 것에는 트랜잭션 시작과 끝, DB연결 및 종료처리, 로깅남기기, 성능 측정 등이 대표적이다.

Untitled

Untitled

AOP vs OOP

OOP재사용성을 높여 확장성에 용이하고, 유지보수와 생산성에 유리한 것이 특징이고, AOP코드의 간결성과 유지보수성이 특징이며 흩어진 관심사들을 모듈화하여 OOP를 보완해준다. OOP와 AOP 각각의 장점을 취할 수 있는 것. 즉, 객체 중심의 OOP와 관심사 중심의 AOP는 대립적인 관계가 아닌 상호 보완적인 관계인 것이다.

AOP 활용 사례