객체지향(OOP)은 기능을 객체 단위로 나누고,
AOP는 공통된 부가기능을 분리해서 따로 모듈화한다.
OOP과 AOP는 분명 코드를 보는 관점이 다름에도
복잡한 로직을 잘게 나눠 명확하게 만든다는 점에서 공통점이 보였다.
| 객체지향 (OOP) | AOP (관점 지향) | |
|---|---|---|
| 출발점 | “기능을 역할별로 나눠서 객체로 추상화하자” | “여러 모듈에 흩어진 부가기능을 한 곳에 모으자” |
| 문제의식 | 역할이 뒤섞인 객체는 유지보수가 어렵다 | 횡단 관심사가 중복되면 코드가 지저분해진다 |
| 기본 단위 | 객체, 클래스 | Aspect, Advice, JoinPoint |
그래서 이 글에서는 OOP와 AOP의 관계에 대해 생각해보고자 한다.

객체지향에서 가장 중요한 원칙 중 하나는 단일 책임 원칙(SRP) 이다.
"하나의 클래스는 하나의 책임만 가져야 한다."
예를 들어, MemberService는 회원 가입, 조회, 탈퇴 등 회원과 관련된 핵심 로직만을 담당해야 한다.
로그 출력, 트랜잭션 시작/종료, 예외 처리 등은 핵심 책임과는 다른 부가 기능이다.
하지만 이런 부가 기능을 클래스 내부에 계속 섞어두면 SRP를 위반하게 된다.
이때 AOP를 활용하면 부가 기능을 Aspect로 분리하여
핵심 객체는 본연의 책임에 집중할 수 있게 도와, 은닉성을 유지하도록 한다.
AOP는 핵심 로직에서 불필요한 세부 구현(부가 기능)을 숨겨줌으로써,
핵심 로직에만 집중할 수 있도록 한다.
이로 인해, 객체가 외부와 불필요한 구현 세부사항을 공유하지 않게 되므로 은닉성을 유지할 수 있다.
잘 설계된 AOP는 객체가 본연의 책임에만 집중할 수 있도록 도와주고,
공통 기능의 흐름을 더 명확하게 표현할 수 있게 해준다.
AOP는 다음과 같이, 객체지향의 핵심 원칙들을 더 잘 지킬 수 있도록 도와준다.
객체지향 원칙과 AOP와의 관계
객체지향 원칙 AOP가 기여하는 방식 SRP (단일 책임 원칙) 핵심 로직과 공통 관심사를 분리해 클래스가 하나의 책임에 집중하도록 돕는다 SoC (관심사의 분리) 로깅, 트랜잭션, 보안 등 횡단 관심사를 Aspect로 분리할 수 있게 한다 OCP (개방-폐쇄 원칙) 기존 코드 수정 없이 공통 기능을 주입할 수 있어 기능 확장에 유리하다