[Spring] Converter

이연우·2025년 8월 18일

TIL

목록 보기
78/100

🔄 Converter 구현이란?

  • Converter데이터 유형 간 변환을 담당하는 메커니즘
  • 웹 요청 파라미터를 Java 객체로 변환하거나 그 반대로 변환할 때 사용
  • 개발자가 커스텀 변환 로직을 정의할 수 있음

⚠️ 주의점

  • Converter라는 이름의 인터페이스는 여러 곳에서 제공됨
  • 우리가 사용하는 것은 org.springframework.core.convert.converter.Converter

🧪 코드 예시

1) String → Integer

@Slf4j
public class StringToIntegerConverter implements Converter<String, Integer> {
    @Override
    public Integer convert(String source) {
        log.info("source = {}", source);
        return Integer.valueOf(source); // 문자열 → 숫자 변환
    }
}

2) Integer → String

@Slf4j
public class IntegerToStringConverter implements Converter<Integer, String> {
    @Override
    public String convert(Integer source) {
        log.info("source = {}", source);
        return String.valueOf(source); // 숫자 → 문자열 변환
    }
}

3) String → Person (커스텀 객체 변환)

@Getter
public class Person {
    private String name;
    private int age; // 나이(년 단위)

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class StringToPersonConverter implements Converter<String, Person> {
    @Override
    public Person convert(String source) {
        // "wonuk:1200"
        String[] parts = source.split(":");
        String name = parts[0];              // wonuk
        int months = Integer.parseInt(parts[1]); // 1200
        int age = months / 12;               // 1200개월 → 100살
        return new Person(name, age);
    }
}

4) Person → String

public class PersonToStringConverter implements Converter<Person, String> {
    @Override
    public String convert(Person source) {
        String name = source.getName();
        int months = source.getAge() * 12;
        return name + ":" + months; // "wonuk:1200"
    }
}

🛠️ TypeConverter 사용

  • 단순히 converter.convert(source)로 변환할 수 있음
PersonToStringConverter converter = new PersonToStringConverter();
String source = "wonuk:1200";
converter.convert(source);

→ 컨트롤러 안에서 변환하는 것과 큰 차이가 없어 보일 수 있지만,
스프링은 Converter를 자동으로 등록/관리해 주기 때문에 훨씬 편리
→ 기본적으로 자주 쓰이는 타입(String, Integer, Enum 등)에 대한 Converter는 이미 제공됨


🧰 Spring의 다양한 Converter 인터페이스

  • Spring에서 제공하는 다양한 Converter 인터페이스가 존재하며
    이들은 Spring데이터 바인딩, 요청/응답 처리, 속성 값 주입 등에 사용되고
    ConversionService를 통해 등록 및 관리

1. Converter<S, T>

  • 가장 기본적인 변환 인터페이스
  • 단일 타입 → 단일 타입 변환
  • 예: String → Integer

2. ConverterFactory<S, R>

  • 클래스 계층 구조가 복잡할 때 사용
  • 기본 타입과 다양한 서브 타입 간 변환 지원

3. GenericConverter

  • 여러 타입 간 유연한 변환 지원
  • 복잡한 변환 로직에 적합

4. ConditionalGenericConverter

  • GenericConverter 확장형
  • matches() 메서드로 변환 가능 여부를 조건부 판단
  • 특정 상황에서만 변환 수행 가능

📖 공식 문서: Spring Type Conversion


🧠 요약 정리

구분설명예시
Converter기본 변환 인터페이스
단일 타입 → 단일 타입 변환
String → Integer,
Integer → String
Converter 구현 예시개발자가 커스텀 타입 변환 로직 구현String → Person,
Person → String
TypeConverter 사용converter.convert(source)
호출로 변환 수행
"wonuk:1200" → Person(name=wonuk, age=100)
ConverterFactory복잡한 클래스 계층 구조 변환 지원Number → 서브 클래스들
GenericConverter다양한 타입 간 유연한 변환 지원Map<String, Object> → CustomObject
ConditionalGenericConverter조건부 변환 지원 (matches() 사용)특정 상황에서만 변환 허용
Spring 기본 제공 ConverterString ↔ Integer, String ↔ Enum 등 자주 쓰이는 변환 내장추가 등록 없이 바로 사용 가능

0개의 댓글