3.4.2 ConverterFactory 사용하기

StringEnum객체로 변환할 때와 같이 전체 클래스 계층에 대한 변환 로직을 한 곳에모으려고 한다면 다음 예제와 같이 ConverterFactory를 구현할 수 있습니다.

클래스 계층으로 묶을 수 있는 java.lang.Number나 java.lang.Enum과 같은 타입 변환 로직을 한 곳에서 관리하고자 하는 경우, 아래의 ConverterFactory 인터페이스의 구현클래스를 작성하면 된다.

package org.springframework.core.convert.converter;

public interface ConverterFactory<S, R> {

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

S를 변환하기 전의 타입으로, R을 변환할 클래스의 범위를 정의하는 기본 타입으로 지정하십시오. 그런 다음, getConverter(Class<T>)를 구현하십시오. 여기서 T는 R의 하위 클래스 입니다.

StringToEnumConverterFactory를 예로 들어 보겠습니다.

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());
        }
    }
}

Enum.valueOf(Class<T> class, String arg)

넘겨 받은 클래스에서 String을 찾아 Enum에서 가져온다.

Last updated