AOP(Aspect Oriented Programming)
>의미
: 관심 지향 프로그래밍
: 핵심 관심 사항과 공통 관심 사항을 분리하는 것.
: 각 클래스들이 본연의 일만 할 수 있도록, 공통된 기능을 가진 부분들을 한 곳으로 따로 모으는 것이다.
: Aspect는 애플리케이션의 공통 관심사를 의미한다.
>필요한 이유
: 코드의 간결성, 코드의 재사용, 그리고 궁극적으로는 객체 지향 설계 원칙에 맞는 코드 구현을 위해서이다.
>방법
- 컴파일 된 바이트코드(.class)를 조작하는 방법
: 컴파일 된 바이트코드에 공통적으로 넣어줄 부분을 끼워 넣기
- 프록시 패턴 사용
: Spring이 사용하는 방법
: 내부에 객체(클래스)를 생성해서 원하는 메서드 호출 전후로 넣어줌
PSA(Portable Service Abstraction)
>의미
: 일관된 서비스 추상화
: 객체의 본질적인 특성만 추출해서 일반화하는 것.
: 클라이언트는 상위 클래스를 일관되게 바라보며(참조), 하위 클래스의 기능을 사용하는 것이 PSA의 기본 개념(다형성)
//여기서 클라이언트는 코드 레벨의 클라이언트, 즉 어떤 클래스의 기능을 사용하는 쪽을 의미한다.
: 인터페이스를 참조하고 이를 구현한 클래스를 사용하기 때문에, 통일된 방식으로 해당 서비스의 기능을 사용할 수 있다.
: 잘 만든 인터페이스라고 생각해도 좋다.
>필요한 이유
: 서비스를 이용하기 위한 접근 방식에 통일성을 주기 위해서
: 기술이 변경되더라도 최소한의 변경으로 변경된 요구 사항을 반영하기 위해서
// Spring이 제공하는 대부분의 API는 PSA이다.
// 즉, 대부분이 인터페이스이고, 인터페이스만 알면 다 거기서 거기니까 너무 부담스러워하지말자
'코드스테이츠_국비교육 > [Section2]' 카테고리의 다른 글
35.02_[Spring] Spring Framework_모듈 아키텍쳐_22.10.12 (0) | 2022.10.12 |
---|---|
35.01_[Spring] Spring Framework_아키텍쳐 개요_22.10.12 (0) | 2022.10.12 |
34.05_[Spring] Spring Framework_IoC, DI_22.10.11 (0) | 2022.10.11 |
34.04_[Spring] Spring Framework 주요 특징&POJO_22.10.11 (0) | 2022.10.11 |
34.02_[Spring] Spring Framwork_22.10.11 (0) | 2022.10.10 |