코드스테이츠_국비교육/[Section2]

34.06_[Spring] Spring Framework_AOP, PSA_22.10.11

생각없이 해도 생각보다 좋다. 2022. 10. 11. 22:38

AOP(Aspect Oriented Programming)

>의미

: 관심 지향 프로그래밍

: 핵심 관심 사항과 공통 관심 사항을 분리하는 것.

: 각 클래스들이 본연의 일만 할 수 있도록, 공통된 기능을 가진 부분들을 한 곳으로 따로 모으는 것이다.

: Aspect는 애플리케이션의 공통 관심사를 의미한다.

>필요한 이유

: 코드의 간결성, 코드의 재사용, 그리고 궁극적으로는 객체 지향 설계 원칙에 맞는 코드 구현을 위해서이다.

>방법

  • 컴파일 된 바이트코드(.class)를 조작하는 방법

: 컴파일 된 바이트코드에 공통적으로 넣어줄 부분을 끼워 넣기

  • 프록시 패턴 사용

: Spring이 사용하는 방법

: 내부에 객체(클래스)를 생성해서 원하는 메서드 호출 전후로 넣어줌

 

PSA(Portable Service Abstraction)

>의미

: 일관된 서비스 추상화

: 객체의 본질적인 특성만 추출해서 일반화하는 것.

: 클라이언트는 상위 클래스를 일관되게 바라보며(참조), 하위 클래스의 기능을 사용하는 것이 PSA의 기본 개념(다형성)

//여기서 클라이언트는 코드 레벨의 클라이언트, 즉 어떤 클래스의 기능을 사용하는 쪽을 의미한다.

: 인터페이스를 참조하고 이를 구현한 클래스를 사용하기 때문에, 통일된 방식으로 해당 서비스의 기능을 사용할 수 있다.

: 잘 만든 인터페이스라고 생각해도 좋다.

>필요한 이유

: 서비스를 이용하기 위한 접근 방식에 통일성을 주기 위해서
: 기술이 변경되더라도 최소한의 변경으로 변경된 요구 사항을 반영하기 위해서

 

// Spring이 제공하는 대부분의 API는 PSA이다.

// 즉, 대부분이 인터페이스이고, 인터페이스만 알면 다 거기서 거기니까 너무 부담스러워하지말자