[Spring Framework] - PSA

김수빈·2022년 6월 18일
0

Spring

목록 보기
4/8

PSA (Portable Service Abstraction)

일관된 서비스 추상화

추상화 란

어떤 사물의 본질적인 특성을 추출해서 일반화 하는 것.

프로그래밍 에서의 추상화

public abstract class Job{
	protected String name;
    protected int salary;
    
    protected abstract void goToWork();
    protected abstract void leaveWork();
    protected abstract void doSomething();
}

public class Coder extends Job{
	@Override
    protected void goToWork(){
    	System.out.println("아침 9시에 출근해요");
    }
    
    @Override
    protected void leaveWork(){
    	System.out.println("저녁 10시에 퇴근해요");
    }
    
    @Override
    protected void doSomething(){
    	System.out.println("코드를 짜요");
    }
}

public class Nurse extends Job{
	@Override
    protected void goToWork(){
    	System.out.println("저녁 6시에 출근해요");
    }
    
    @Override
    protected void leaveWork(){
    	System.out.println("아침 6시에 퇴근해요");
    }
    
    @Override
    protected void doSomething(){
    	System.out.println("환자를 돌봐요");
    }
}

위와 같이 추상화된 클래스 Job을 생성하고, 그 안에 출근, 퇴근, 일하기 등의 추상화된 메소드를 구현해 놓는다.

추상화된 클래스 Job 을 상속받는 Coder, Nurse 클래스를 생성하고, 추상 메소드를 구현하였다. (내용은 틀릴수도 있음)

public class Main {
    public static void main(String[] args) {
        Job coder = new Coder();
        Job nurse = new Nurse(); 

        coder.doSomething();
        nurse.doSomething();
    }
}



##실행 결과
-----------------
코드를 짜요
환자를 돌봐요

Main 클래스에서 main 메소드를 실행할 때, Coder 객체와 Nurse 객체를 사용하면서 구체화 클래스의 객체를 자신의 타입에 할당하지 않고, Job 클래스 변수에 할당하였다.

이렇게 되면 Job 라는 추상 클래스만 일관적으로 바라보게 되며 하위 클래스의 기능을 사용할 수 있다.

이처럼 클라이언트(어떤 클래스의 기능을 사용하는 측) 가 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것 이 바로 PSA의 기본 개념이다.

PSA 가 필요한 이유

  1. 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함

  2. 애플리케이션의 요구 사항 변경에 유연하게 대처할 수 있다.

Spring 에서의 PSA 적용 사례

  1. 트랜잭션 서비스
  2. 메일 서비스
  3. Spring Data 서비스

0개의 댓글