728x90
이렇게 타입 컨버터를 하나하나 직접 찾아서 타입 변환에 사용하는 것은 매우 불편하다. 그래서 스프링은 개별 컨버터를 모아 두고 그것들을 묶어서 편리하게 사용할 수 있는 기능을 제공하는데, 이것이 바로 컨버전 서비스( ConversionService )이다
public class ConversionServiceTest {
@Test
public void conversionService(){
//등록
DefaultConversionService conversionService = new DefaultConversionService(); //ConversionService를 구현한 구현체
conversionService.addConverter(new StringToIntegerConverter());
conversionService.addConverter(new IntegerToStringConverter());
conversionService.addConverter(new StringToIpPortConverter());
conversionService.addConverter(new IpPortToStringConverter());
//사용
//Integer result = conversionService.convert("10", Integer.class);
//System.out.println("result = " + result);
assertThat(conversionService.convert("10", Integer.class)).isEqualTo(10);
assertThat(conversionService.convert(10, String.class)).isEqualTo("10");
IpPort ipPort = conversionService.convert("127.0.0.1:8080", IpPort.class);
assertThat(ipPort).isEqualTo(new IpPort("127.0.0.1" , 8080));
String ipPortString = conversionService.convert(new IpPort("127.0.0.1" , 8080), String.class);
assertThat(ipPortString).isEqualTo("127.0.0.1:8080");
}
}
- DefaultConversionService는 ConversionService 인터페이스를 구현했는데, 추가로 컨버터를 등록하는 기능도 제공한다.
- 등록과 사용의 분리
- 컨버터를 등록할 때는 StringToIntegerConverter 같은 타입 컨버터를 명확하게 알아야 한다. 반면에 컨버터를 사용하는 입장에서는 타입 컨버터를 전혀 몰라도 된다
- 타입 컨버터들은 모두 컨버전 서비스 내부에 숨어서 제공된다
- 따라서 타입을 변환을 원하는 사용자는 컨버전 서비스 인터페이스에만 의존하면 된다.
- 물론 컨버전 서비스를 등록하는 부분과 사용하는 부분을 분리하고 의존관계 주입을 사용해야 한다.
- 인터페이스 분리 원칙 - ISP(Interface Segregation Principal)
- 인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다.
- DefaultConversionService의 인터페이스 구현
- ConversionService : 컨버터 사용에 초점
- ConverterRegistry : 컨버터 등록에 초점
- 이렇게 인터페이스를 분리하면 컨버터를 사용하는 클라이언트와 컨버터를 등록하고 관리하는 클라이언트의 관심사를 명확하게 분리할 수 있다.
- 특히 컨버터를 사용하는 클라이언트는 ConversionService 만 의존하면 되므로, 컨버터를 어떻게 등록하고 관리하는지는 전혀 몰라도 된다.
- 결과적으로 컨버터를 사용하는 클라이언트는 꼭 필요한 메서드만 알게 된다. 이렇게 인터페이스를 분리하는 것을 ISP 라 한다
- ISP 참고: https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4_%EB%B6%84%EB%A6%AC_%EC%9B%90%EC%B9%99
인터페이스 분리 원칙 - 위키백과, 우리 모두의 백과사전
인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.[1] 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분
ko.wikipedia.org
728x90
'스프링 MVC 2편(백엔드 웹 개발 활용 기술)' 카테고리의 다른 글
| Ch10. 스프링 타입 컨버터 소개 - 뷰 템플릿에 컨버터 적용하기 (0) | 2022.03.22 |
|---|---|
| Ch10. 스프링 타입 컨버터 소개 - 스프링에 Converter 적용하기 (0) | 2022.03.22 |
| Ch10. 스프링 타입 컨버터 소개 - 스프링 타입 컨버터 (0) | 2022.03.22 |
| Ch09. API 예외 처리 - @ControllerAdvice (0) | 2022.03.21 |
| Ch09. API 예외 처리 - 스프링이 제공하는 ExceptionResolver (0) | 2022.03.21 |