[Spring 특징] PSA (Portable Service Abstraction)
by mignon25PSA (Portable Service Abstraction) 란?
객체 지향 설계 5원칙인 SOLID의 OCP 및 DIP와 관련이 있다.
소프트웨어 요소는 확장에는 열려 있되, 변경에는 닫혀 있어야 하고, (OCP)
프로그래머는 추상화에 의존해야 하며, 구체화에 의존해서는 안된다(DIP)는 원칙이다.
왜 추상화에 의존해야 할까?
클라이언트가 구체적인 구현체에 의존하게 된다면, 사용하는 구현체가 바뀌어야 할 때, 그 구현체를 사용하던 모든 곳에서 같이 수정이 이루어져야 한다. 이는 객체지향적인 설계가 아니다.
그러므로 클라이언트는 해당 구현체의 역할만 인지하고, 그 역할만 정해져 있는 추상 클래스를 의존해야 한다.
그리고 사용할 때는 그 추상클래스를 구현한 실제 구현체를 적용해주는 것이다.
그러면 구현체가 바뀌더라도 해당 추상 클래스를 구현한 구현체로만 바꾸어주면 클라이언트에서의 변경이 필요하지 않다.
이처럼 클라이언트가 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 일관된 서비스 추상화(PSA)의 기본 개념이다.

DbClient 는 OracleJdbcConnector, MariaDBJdbcConnector, SQLiteJdbcConnector 같은 JdbcConnector 인터페이스의 구현체에 직접적으로 연결해서 Connection을 얻는 것이 아니라, JdbcConnector 인터페이스를 통해 간접적으로 연결되어(느슨한 결합) Connection 객체를 얻게 된다.
이 때, 어떤 구현체를 사용하더라도 DbClient 가 Connection 을 얻는 방식은 getConnection() 메서드를 사용하는 것으로 동일하다.
즉, 일관된 방식으로 해당 서비스의 기능을 사용할 수 있다.
PSA 가 필요한 주된 이유
어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써, 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구사항을 반영하기 위함.
=> 애플리케이션의 요구 사항 변경에 유연하게 대처할 수 있다.
'Spring' 카테고리의 다른 글
| AOP의 적용 간단 플로우 (간단한 예제) (5) | 2023.04.06 |
|---|---|
| 스프링 컨테이너 (0) | 2023.04.05 |
| [Spring 특징] AOP (Aspect Oriented Programming) (0) | 2023.04.04 |
| [Spring 특징] POJO (0) | 2023.04.03 |
| [Spring 특징] IoC (Inversion of Control) 와 DI (Dependency Injection) (0) | 2023.04.03 |
블로그의 정보
Mignon'S Dev Log
mignon25