Today I Learned

241126 TIL | Spring 변환 제공 인터페이스

shinelee26 2024. 11. 26. 22:33

오늘 진행한 학습 요약

1. Spring 심화 1주차

  • HttpMessageConverter
  • ArgumentResolver
  • TypeConverter
  • ConversionService
  • Formatter
  • Spring Formatter

2. 알고리즘 코드카다  Day42(작성 생략)

CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest

 


학습 정리

1. Spring 심화 1주차

 

HttpMessageConverter

  • Spring의 HttpMessageConverter는 HTTP 요청/응답 데이터를 Java 객체와 변환하는 역할을 하는 인터페이스
    • 주요 구현체
      • MappingJackson2HttpMessageConverter: JSON 데이터 변환에 사용됨.
      • StringHttpMessageConverter: String 데이터 변환에 사용됨.
      • FormHttpMessageConverter: 폼 데이터를 Key-Value 형태로 변환함.
      • ByteArrayHttpMessageConverter: 바이트 배열 데이터를 처리함.
    • 동작 과정
      • 요청 데이터(Content-Type)에 맞는 변환기를 선택하여 Java 객체로 변환함.
      • 컨트롤러 반환 데이터를 HTTP 응답 데이터로 변환함.

ArgumentResolver

  • Spring의 HandlerMethodArgumentResolver는 컨트롤러 메서드의 매개변수를 커스텀 방식으로 해석하고 주입할 수 있도록 도와주는 인터페이스
    • 주요 역할
      • 요청 데이터를 읽어 매개변수에 맞게 변환
      • 커스텀 주석이나 타입 기반으로 매개변수를 주입
    • 동작 과정
      • 등록된 ArgumentResolver 중 지원 가능한지 확인
      • 요청 데이터를 매개변수에 맞는 값으로 변환하여 반환
    • 구현 방법
      • HandlerMethodArgumentResolver를 구현하여 커스텀 로직 작성
      • supportsParameter로 매개변수 지원 여부 정의.
      • resolveArgument에서 변환 로직 구현.
    • 등록 방법
      • WebMvcConfigurer의 addArgumentResolvers 메서드에서 추가

TypeConverter

  • Spring의 TypeConverter는 문자열이나 기본 데이터 타입을 다른 타입으로 변환하는 기능을 제공하는 인터페이스
    • 주요 역할
      • 타입 변환: 한 타입의 값을 다른 타입으로 변환함
      • 유연성 제공: 사용자 정의 변환 로직을 통해 확장 가능함.
    • 사용 방식
      • Spring 내장 지원: @Value 또는 Bean 설정에서 기본 타입 변환을 자동 지원함.
      • Custom Converter: Converter 인터페이스를 구현해 사용자 정의 변환 로직을 추가할 수 있음.
    • 구현 방법
      • Converter<S, T>를 구현해 변환 로직 작성.
      • ConversionService에 등록하여 사용.
    • 등록 방법
      • Spring의 ConversionService에 등록해 활용함.

ConversionService

  • 주요 역할
    • 타입 변환 관리: 등록된 변환기(Converter)를 통해 객체를 변환함.
    • 유연성 제공: 사용자 정의 변환기를 등록하여 커스텀 변환 지원함.
  • 주요 메서드
    • canConvert(Class<?> sourceType, Class<?> targetType)
      • 변환 가능 여부를 확인
    • convert(Object source, Class<?> targetType)
      • 주어진 객체를 대상 타입으로 변환함.
  • 사용 방식
    • Spring에서 자동 변환:
      • @Value, @RequestParam, @PathVariable 등에 활용
    • Custom Converter 등록:
      • 변환 로직이 필요할 경우 ConversionService에 추가 가능.
  • 구현 방법
    • DefaultConversionService나 GenericConversionService 사용.
    • 변환기를 등록하여 변환 로직 확장.

Formatter

  • Spring의 Formatter는 문자열과 객체 간의 양방향 변환을 제공하는 인터페이스
    • 주요 역할
      • 문자열 → 객체 변환: 텍스트를 객체로 변환.
      • 객체 → 문자열 변환: 객체를 포맷된 문자열로 변환.
    • 주요 메서드
      • parse(String text, Locale locale)
        • 문자열을 객체로 변환.
      • print(T object, Locale locale)
        • 객체를 문자열로 변환.
    • 사용 방식
      • 포맷팅: 날짜, 숫자, 금액 등의 데이터 변환에 사용.
      • 커스텀 포맷터 작성: 사용자가 필요한 변환 규칙 정의 가능.
    • 등록 방법
      • ConversionService에 등록
      • @Configuration 클래스에서 addFormatters 메서드로 추가

Spring Formatter

  • Spring의 Formatter는 문자열과 객체 간 변환 및 포맷을 처리하는 인터페이스
    • 주요 역할
      • 문자열 → 객체 변환: 텍스트를 특정 객체로 변환
      • 객체 → 문자열 변환: 객체를 포맷된 문자열로 변환
    • 주요 메서드
      • parse(String text, Locale locale): 문자열을 객체로 변환.
      • print(T object, Locale locale): 객체를 포맷된 문자열로 변환.
    • 사용 방식
      • 날짜, 숫자, 금액 등 데이터를 특정 포맷으로 변환하거나 파싱하는 데 사용함.
      • 필요 시 사용자 정의 포맷터를 작성 가능..
    • 등록 방법
      • FormatterRegistry를 사용해 등록
      • ConversionService에 등록해 전역으로 사용 가능