AOP(Aspect Oriented Programming)
객체 지향 프로그래밍은 책임과 관심사에 따라 클래스를 분리함으로서 각 클래스가 단일 책임을 가지게 된다. 이렇게 분리된 클래스들의 응집도는 높아지고 결합도는 낮아져, 애플리케이션 한 부분에 변경이 발생했을 때 시스템 전체의 문제로 퍼지지 않게 한다.
그러나 각 클래스가 가지는 로깅, 보안 트랜젝션 등과 같은 공통 기능이 흩어져 있어 중복되는 코드가 발생한다. 이러한 문제점을 보완하고 핵심 비즈니스 로직 코드만 작성할 수 있도록 하는 것이 AOP라고 할 수 있다.
AOP의 정의
- 관심 지향 프로그래밍 : 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 각각 모듈화하는 것
- Aspect : 애플리케이션의 공통 관심사를 의미
❓ 모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
AOP에서 모듈화는 공통 관심 사항과 핵심 관심 사항으로 나뉜다.
- 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통기능에 대한 관심과 관련있다.
공통 관심 사항과 핵심 관심 사항
💡 핵심 : 메인이 되는 기능들
공통 : 로깅, 보안, 트랜젝션과 같은 애플리케이션의 공통적인 기능들
공통 관심 사항
- 애플리케이션 전반에 걸쳐 공통적으로 사용되는 기능들에 대한 관심사
- 핵심 관심 사항에 반대되는 개념
- 부가적인 관심 사항이라고도 한다.
핵심 관심 사항
- 비즈니스 로직, 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사
💡AOP : 애플리케이션의 핵심 업무 로직에서 공통 기능 로직들을 분리하여 재사용하는 것
AOP의 장점
- 코드의 간결성 유지
- 객체 지향 설계 원칙에 맞는 코드 구현
- 코드의 재사용
중복된 코드를 공통화하여 재사용이 가능하도록 하는 기능을 가진다.
PSA(Portable Service Abstraction)
PSA의 정의
- 일관된 서비스 추상화
- 추상 클래스의 하위 클래스들을 클라이언트(기능을 사용하는 주체)가 사용할 때, 하위 클래스의 객체를 자신의 타입으로 할당하지 않고 추상 클래스인 상위 클래스로 할당하며 클라이언트가 추상 클래스만 바라보며 하위 클래스의 기능을 사용할 수 있다.
기능을 사용하는 주체인 클라이언트가 상위 클래스의 서비스를 사용하는 것처럼 보이게 하는 것?
- 서비스의 기능을 일관되게 접근하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것.
PSA의 장점
- 요구사항이나 기술이 변경되었을 때, 수정의 양을 최소화 한다.
- 요구 사항 변경을 유연하게 대처할 수 있다.
- 어떤 서비스를 이용하기 위한 접근 방식이 일관되게 유지되기 때문에