Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[TypeConverter] Formatter, ConversionService 본문

인프런/[인프런] 스프링 MVC 2

[TypeConverter] Formatter, ConversionService

Seung__ 2021. 10. 2. 13:54
  • Formatter를 등록해서 사용하자!
  • Formatter를 지원하는 ConversionService를 사용하면 ConversionService에 Formatter 추가 가능.
  • 내부에서 Adapter pattern을 사용해서 Formatter가 Converter처럼 동작하도록 지원.

 

1. FormattingConversionService


  • 포맷터를 지원하는 컨버전 서비스
  • DefaultFormattingConversionService 는 FormattingConversionService 에
  • 기본적인 통화, 숫자 관련 몇가지 기본 포맷터를 추가해서 제공

 

2. DefaultFormattingConversionService 의 상속관계


  • FormattingConversionService 는 ConversionService 관련 기능을 상속받음
  • 결과적으로 컨버터 & 포맷터 모두 등록이 가능.
  • 그리고 사용할 때는 ConversionService 가 제공하는 convert 를 사용
  • 스프링 부트는 DefaultFormattingConversionService 를 상속 받은 WebConversionService를 내부에서 사용.

 

3. Formatter 사용.


public class FormattingConversionServiceTest {

    @Test
    void formattingConversionService(){
         DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();

        //컨버터 등록
        conversionService.addConverter(new StringToIpPortConverter());
        conversionService.addConverter(new IpPortToStringConverter());

        //포매터 등록
        conversionService.addFormatter(new MyNumberFormatter());

        //컨버터 사용
        IpPort ipPort = conversionService.convert("127.0.0.1:8080", IpPort.class);
        assertThat(ipPort).isEqualTo(new IpPort("127.0.0.1", 8080));

        //포매터 사용
        String convert = conversionService.convert(1000, String.class);
        assertThat(convert).isEqualTo("1,000");
        assertThat(conversionService.convert("1,000", Long.class)).isEqualTo(1000);
    }
}

 

 

4. GitHub : 211002 FormattingConversionService


 

GitHub - bsh6463/TypeConverter

Contribute to bsh6463/TypeConverter development by creating an account on GitHub.

github.com

 

Comments