환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하려는 추상화 구조
추상화의 예
예를 들어, 미취학 아동을 관리하는 애플리케이션을 설계하면서 아이 클래스를 일반화(추상화) 한다라고 가정해보자.
Child라는 상위 클래스에 일반화 시켜 놓은 아이의 동작을 NewBornBaby, Infant, Toddler 라는 클래스로 연령별 아이의 동작으로 구체화 시켜서 사용을 하고 있다.
여기서 중요한 것은 클라이언트(여기서는 ChildManageApplication 클래스의 main() 메서드)는NewBornBaby, Infant, Toddler 를 사용할 때 구체화 클래스의 객체를 자신의 타입에 할당하지 않고, (1) ~ (3)과 같이 Child 클래스 변수에 할당을 해서 접근을 한다.
이렇게 되면 클라이언트 입장에서는 Child 라는 추상 클래스만 일관되게 바라보며 하위 클래스의 기능을 사용할 수 있다.
이처럼 클라이언트가 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 바로 일관된 서비스 추상화(PSA)의 기본 개념이다.
PSA가 필요한 주된 이유는 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함이다.
즉, PSA를 통해서 애플리케이션의 요구 사항 변경에 유연하게 대처할 수 있다.
Spring은 상황에 따라 기술이 바뀌더라도 변경된 기술에 일관된 방식으로 접근할 수 있는 PSA를 적극적으로 지원하고 있다.
Spring에서 PSA가 적용된 분야로는 트랜잭션 서비스, 메일 서비스, Spring Data 서비스 등이 있다.