SRP(Single Responsibility Principle) : 단일 책임 원칙
- 객체지향 설계 원칙 중 하나
- 클래스나 모듈이 하나의 변경 사유만 가져야 함
- 클래스 단위에서 적용되는 설계 원칙
- 각 클래스는 하나의 책임만 가져야 하며, 변경할 이유가 하나여야 함
- 정적인 구조 관점에서 코드를 설계하는 원칙
AOP(Aspected Oriented Programming) : 관점 지향 프로그래밍
- 프로그래밍 패러다임
- 핵심 기능과 보조 기능을 분리하여 모듈화하는 기법
- 여러 클래스에 걸쳐 공통적으로 나타나는 부가 기능을 분리
- 동적인 실행 시점에서 부가 기능을 핵심 로직에 삽입
- 로깅, 트랜잭션, 보안 등의 공통 관심사를 독립된 모듈로 관리
기능 분리 방식의 차이
SRP
- 수직적 분리
- 서로 다른 책임를 가진 기능들을 별도의 클래스로 분리
- 각각 독립적인 책임을 가진 클래스들로 나누는 것
EX
- UserService 클래스에서 사용자 관리 + 이메일 발송 기능이 섞여있다면
=> UserService와 EmailService 로 분리
AOP
- 수평적 분리
- 여러 클래스에 공통으로 나타나는 부가 기능을 분리
- 횡단으로 나타나는 공통 관심사를 별도 모듈로 분리하는 것
EX
- UserService, OrderService, PaymentService 모두에 로깅 코드가 있다면
=> 로깅 기능을 Aspect로 분리
SRP와 AOP는 상호 보완적인 관계
- AOP를 적용하게 되면 자연스럽게 SRP를 지키게 됨
- 따라서, AOP는 SRP를 실현하는 구현 기법 중 하나라고 볼 수 있음