- 관점에 따라 다르게 행동할 수 있어야한다 - 핵심
- 부가로직을 공통모듈로 만들어야한다. → 부가로직이 동일한 코드여야한다. - 특징
- 행단관심사(행동 단위 관심사 : 특정 기능이나 관심사를 중심으로 시스템을 모듈화하고 구성하는 접근 방식)

1. AOP
관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)은 프로그램의 여러 부분에서 반복적으로 나타나는 공통 관심사를 따로 분리하여 관리하는 방법이다.
- 관점에 따라 행위가 달라져야 함
- 공통 관심사를 분리하여 재사용
- SRP(단일 책임 원칙) 준수
2. AOP의 주요 특징
2.1 행단위 관심사 분리
- 핵심 로직(Core Concern): 비즈니스 로직에 필수적인 부분
- 부가 로직(Cross-cutting Concern): 여러 곳에서 공통적으로 사용되는 부분
- 로깅, 보안, 트랜잭션 등
2.2 동적 행위 결정
- Reflection을 통한 런타임 동작 변경
- 어노테이션이나 필드를 기반으로 다른 행위 수행
- 프록시 패턴을 통한 부가 기능 구현
3. 예시
3.1 "옷을 입다" 예시
공통 모듈 (부가 로직) - "옷을 입다" ↓ 상황별 구현 (핵심 로직) - 회사 미팅: 격식있게 입기 - 운동: 츄리닝 입기 - 소개팅: 젠틀하게 입기
3.2 "이동하다" 예시
공통 모듈 (부가 로직) - "이동하다" ↓ 구체적 구현 (핵심 로직) - 지하철 타기 - 걷기 - 버스 타기
4. AOP 구현 방식
4.1 프록시 패턴
- 공통 관심사를 프록시 객체로 분리
- 원본 객체의 메소드 호출 전/후에 부가 기능 수행
4.2 Reflection 활용
- 런타임에 클래스의 정보를 분석
- 어노테이션이나 필드 정보를 기반으로 동작 변경
5. AOP 사용의 이점
- 코드 중복 제거
- 비즈니스 로직의 명확한 분리
- 유지보수성 향상
- 재사용성 증가
Share article