Skip to content

Spring Core에서 제공하는 Type Conversion 기능이다.

flowchart LR
    A --> AToBConverter --> B

쉽게 말해 A 타입의 데이터를 B 타입으로 변경하고 싶을 때 사용한다.

Converter 등록하기

컨버터는 라이브러리 단에서 제공하는 경우도 있지만 사용자가 직접 정의할 수도 있다.

Converter SPI

일반적인 컨버터는 Converter 인터페이스를 이용해서 만들 수 있다.

package org.springframework.core.convert.converter;

public interface Converter<S, T> {

    T convert(S source);
}

String을 Integer로 변환하는 컨버터를 만들고 싶다면 다음과 같이 만들 수 있다.

package org.springframework.core.convert.support;

final class StringToInteger implements Converter<String, Integer> {

    public Integer convert(String source) {
        return Integer.valueOf(source);
    }
}

ConverterFactory

하지만 때에 따라 다형성이 지원되는 컨버터가 필요할 수 있다. 이러한 경우 ConverterFactory를 사용할 수 있다.

package org.springframework.core.convert.converter;

public interface ConverterFactory<S, R> {

    <T extends R> Converter<S, T> getConverter(Class<T> targetType);
}

예를 들어 Enum 타입에 대한 String 컨버터를 정의하고 싶다면 다음과 같이 할 수 있다.

package org.springframework.core.convert.support;

final class StringToEnumConverterFactory implements ConverterFactory<String, Enum> {

    public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
        return new StringToEnumConverter(targetType);
    }

    private final class StringToEnumConverter<T extends Enum> implements Converter<String, T> {

        private Class<T> enumType;

        public StringToEnumConverter(Class<T> enumType) {
            this.enumType = enumType;
        }

        public T convert(String source) {
            return (T) Enum.valueOf(this.enumType, source.trim());
        }
    }
}

Last update : 21 octobre 2023
Created : 9 octobre 2023