기본 개념
- 핵심 기능(Core Concerns) : 업무 로직을 포함하는 기능
- 부가 기능(CROSS-CUTTING CONCERNS) : 핵심 기능을 도와주는 부가적인 기능
- 로깅, 보안, 트랜잭션 등이 있습니다.
- Aspect : 부가 기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용할지 결정하는 포인트컷(PointCut)을 합친 개념입니다. (Advice + PointCut ⇒ Aspect)
주요 개념
- 추후 배울 Spring MVC 구조는 @Controller, @Service, @Repository와 같이 관심사 별로 계층을 나눠 객체를 관리하게 됩니다.
- 관심사의 분리는 모듈화의 핵심입니다.
업무 관련 코드는 핵심 관심사(Core Concerns: 핵심 기능)라고 합니다.
특정 관심사 업무 코드에 트랜잭션, 보안, 로깅 등의 코드가 존재하고 업무와는 관련이 없지만 애플리케이션에 필수적인 부가 기능입니다.
트랜잭션, 보안, 로깅 기능은 불특정 다수의 클래스에서 존재하게 됩니다.
관심사 관점에서는 트랜잭션, 보안, 로깅 코드들을 횡단 관심사(Cross-cutting Concerns: 부가 기능)라고 합니다.
비즈니스 클래스에 횡단 관심사와 핵심 관리사가 공존하게 됩니다.
메소드 복잡도 증가 → 비즈니스 코드 파악이 어렵게 됩니다.
부가 기능의 불특정 다수 메소드가 반복적으로 구현 → 횡단 관심사의 모듈화가 어렵습니다.
AOP란 무엇일까?
AOP(Aspect-Oriented Programming)는 기존과 다른 프로그램 구조 사고 방식을 제공함으로써 객체 지향 프로그래밍(OOP)의 부족한 부분을 보완합니다.
OOP의 모듈화의 핵심 단위는 클래스이고, AOP의 모듈화의 핵심 단위는 관점입니다.
Aspect는 여러 유형과 객체 간에 발생하는 문제 (ex - 트랜잭션)의 모듈화를 가능하게 합니다.
핵심 포인트
- 객체 지향 프로그래밍(OOP)는 객체 지향 프로그래밍이다.
- OOP 방식의 프로그래밍을 했을 때 여러 곳에서 공통적으로 사용되는 부가 기능의 중복 코드가 발생
- 중복되는 부가 기능에 수정 및 삭제가 필요하게 되면 사용되는 모든 곳에 수정 및 삭제 필요
- 관심 지향 프로그래밍(AOP)은 OOP 방식의 불필요한 반복을 해결하기 위한 방법