스프링 MVC 2편(백엔드 웹 개발 활용 기술)

Ch10. 스프링 타입 컨버터 소개 - 컨버전 서비스(ConversionService)

webmaster 2022. 3. 22. 12:04
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