24.11.20 TIL Type Converter

신성훈·2024년 11월 20일
0

TIL

목록 보기
82/162

1. Type Converter란?

Spring Framework에서 Type Converter문자열(String)Java 객체 간의 타입 변환을 지원하는 인터페이스입니다. 주로 사용자 입력 데이터나 설정 값을 애플리케이션에서 사용 가능한 객체로 변환할 때 사용됩니다.

Type Converter의 역할:

  • 문자열 데이터를 객체로 변환 (예: String → Integer)
  • 객체를 문자열로 변환 (예: LocalDate → String)

Spring MVC는 폼 데이터를 컨트롤러의 매개변수로 전달하거나, 객체를 응답으로 반환할 때 이 기능을 활용합니다.


2. Spring의 기본 Type Conversion

Spring은 ConversionService를 통해 기본적인 타입 변환을 제공합니다.
기본적으로 지원되는 변환에는 다음과 같은 것들이 포함됩니다:

  • String → 기본 자료형 (int, double, boolean 등)
  • String → Wrapper 클래스 (Integer, Long 등)
  • String → Enum
  • String → Date (포맷 필요)

3. Type Converter 구현

Spring에서 Converter 인터페이스를 사용해 커스텀 타입 변환기를 구현할 수 있습니다.

Converter 인터페이스 구조:

public interface Converter<S, T> {
    T convert(S source);
}

3.1 간단한 예제

String 타입을 LocalDate로 변환하는 Converter를 구현해 보겠습니다.

Custom Converter:

import org.springframework.core.convert.converter.Converter;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class StringToLocalDateConverter implements Converter<String, LocalDate> {
    @Override
    public LocalDate convert(String source) {
        return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}

Converter 등록:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToLocalDateConverter());
    }
}

4. 컨트롤러에서 활용

4.1 사용자 입력 처리

StringToLocalDateConverter를 등록하면 컨트롤러에서 String 입력을 자동으로 LocalDate로 변환합니다.

@PostMapping("/events")
public String createEvent(@RequestParam("date") LocalDate date) {
    System.out.println("Event Date: " + date); // 변환된 LocalDate 객체
    return "Event created!";
}

요청 예시:

POST /events?date=2024-11-21

4.2 객체를 문자열로 변환

Spring은 객체를 문자열로 변환할 때에도 같은 ConversionService를 사용합니다.


5. Spring Boot와 기본 Converter

Spring Boot는 자동으로 ConversionService를 구성하며, 커스텀 Converter를 쉽게 등록할 수 있도록 설정을 제공합니다.

Spring Boot에서 Converter 등록:

@Bean
public Converter<String, LocalDate> stringToLocalDateConverter() {
    return source -> LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}

6. Type Converter와 Formatter 비교

  • Converter:

    • 타입 간 변환 (예: String → LocalDate)
    • 단순한 변환 로직을 구현할 때 사용
  • Formatter:

    • 변환 + 포맷 지원 (주로 날짜/숫자 데이터)
    • 지역(Locale) 설정 가능

Formatter 예제

public class LocalDateFormatter implements Formatter<LocalDate> {
    @Override
    public LocalDate parse(String text, Locale locale) throws ParseException {
        return LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

    @Override
    public String print(LocalDate object, Locale locale) {
        return object.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}

7. 마무리

  • Spring의 Type Converter는 입력 데이터를 원하는 객체로 변환할 때 매우 유용하며, 특히 사용자 입력 검증이나 설정값 처리에 필수적임을 느꼈습니다.
  • Spring Boot에서 제공하는 ConversionService 덕분에 대부분의 기본적인 타입 변환은 별도의 설정 없이 처리 가능하다는 점이 편리했습니다.
  • 실무에서는 포맷이 중요한 데이터(예: 날짜, 금액 등) 처리 시 Formatter와 Converter를 적절히 활용해야 함을 알게 되었습니다.
  • 커스텀 Converter를 구현하면서 타입 간 변환 로직을 더 효율적으로 구성할 수 있는 방법을 고민하게 되었습니다.
profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글