- 프로그램을 설계할 때 사용하는 프로그래밍 패러다임
- Aspect(측면, 양상) Oriented(지향의) Programming의 약자 말 그대로 관점 지향 프로그래밍 이다.
- 프로그램을 구성하는 여러 기능들을 "핵심 기능"과 "부가 기능"으로 서로 다른 관점으로 분리해서 관리하는 프로그래밍 방식이기때문에 관점 지향 이라고 부름
핵심 비즈니스 로직과부가적인 로직을 분리하여 모듈화 한다.- 프로그램의 여러 부분에 흩어져 중복되는 공통 관심 사항을 하나의 모듈로 묶어 관리
- 코드의 중복과 복잡성을 줄이고 유지보수를 용이하게 함
- 애플리케이션의 본질적인 목적과 가치를 제공하는 기능
- 사용자가 직접적으로 요구하고 기대하는 주요 기능
- 도메인 특화적이며, 각 애플리케이션마다 고유한 로직
예시
- 핵심 기능을 지원하거나 보완하는 공통적인 부가 기능
- 비즈니스 가치와 직접적인 관련은 없지만 시스템 운영에 필수적
- 여러 모듈이나 클래스에서 반복적으로 필요한 횡단 관심사
예시
이 기능이 없으면 애플리케이션의 핵심 가치가 제대로 전달되는가?
- Yes => 핵심 로직
- No => 부가 로직
이 코드가 여러 클래스나 메서드에서 반복되는가
- Yes => 부가 로직
- No => 핵심 로직
이 기능의 변경이 다른 비즈니스 로직에 영향을 주는가?
- Yes => 부가 로직
- No => 핵심 로직
이 기능이 클래스의 단일 책임을 위반하는가?
- Yes => 부가 로직
- No => 핵심 로직
- SRP는 객체 지향 설계 원칙 중 하나 AOP는 프로그래밍 설계 패러다임
- 서로 기능을 분리하는 방식의 차이가 있음
- 서로 상호 보완 관계 AOP를 사용하면 SRP를 준수할 수 있게 됨