-
[Spring] ConverterSpring 2025. 4. 17. 20:18
Spring
🔥 Convert
🎯 데이터 유형 간 변환을 담당하는 메커니즘, 주로 웹 요청 파라미터를 Java 객체로 변환하거나
그 반대로 변환할 때 사용되며 커스텀 변환 로직을 정의할 수 있다.
✅ 기본 구현
public interface Converter<S, T> { T convert(S source); }S: 원본 타입, T: 목표 타입
✅ 커스텀 Converter 사용 예시
String → Enum, String
public class StringToGradeConverter implements Converter<String, Grade> { @Override public Grade convert(String source) { return Grade.valueOf(source.toUpperCase()); } }✅주의점
org.springframework.core.convert.converter (변경시 Convert와 같은 이름을 가진 Interface가 많으니 주의!)

✅종류
인터페이스 특징/설명 Converter<S,T> 기본적인 변환을 담당하는 인터페이스
단순 변환(한 타입에서 한 타입으로)ConvertFactory<S, R> 클래스 계층 구조가 복잡한 경우 사용
기본 타입과 다양한 서브 타입 간의 변환을 지원한다.
팩토리 패턴(한 타입에서 여러 하위 타입으로 변환가능)GenericConverter 다양한 타입 간의 유연한 변환을 지원한다.
복잡한 타입 변환 로직을 구현할 때 유리하다.
복잡/조건부 변환 (입출력 타입을 런타임에 동적으로 지정, 필드별 맞춤형 변환 등)ConditionalGenericConverter GenericConverter 의 확장형으로 특정 조건에서만 타입 변환을 수행한다.
추가적으로 matches() 를 통해 변환 가능 여부를 판단할 수 있다.🔥 ConversionService
🎯 Spring은 Converter를 모아서 편리하게 관리하고 사용할 수 있게 해주는 기능을 제공한다.
이것이 Conversion Service 이다.canConvert() : Convert 가능 여부를 확인하는 기능
convert() : 실제 변환하는 기
🔥DefaultConversionService
🎯 Spring의 표준 ConversionService로 기본 제공 Converter와 확장 가능성을 통해 다양한 타입 변환을 유연하게
처리할 수 있도록 지원한다.🎯 Spring에서 사용하는 기본 변환기 저장소이자 중심 변환기 서비스 이며,
CovertSionService의 구현체로 기본 타입 변환기 + 커스텀 Converter 까지 모두 처리 가능✅ 특징 요약
항목 설명 클래스 이름 org.springframework.core.convert.support.DefaultConversionService 역활 Converter, ConverterFactory, GenericConverter 를 관리하는 변환기 컨테이너 내부 등록 기본적인 String → 숫자, String → Enum, 날짜 변환 등 다수 등록돼 있음 활용 방식 WebDataBinder, BindingResult, ModelAttribute, @RequestParam 등에서 자동 사용됨 커스텀 개발자가 만든 Converter도 addConverter() 등으로 등록 가능 ConversionService conversionService = new DefaultConversionService(); ((DefaultConversionService) conversionService).addConverter(new StringToGradeConverter()); Grade grade = conversionService.convert("vip", Grade.class); // 결과: Grade.VIP● Spring MVC에서 요청 파라미터를 객체로 바꾸거나,
● @Value, @RequestParam, @ModelAttribute 등에서 값이 바인딩될 때,
● 전부 이 ConversionService를 기반으로 타입 변환이 이루어짐!
ConverterRegistry
Convert를 등록하고 관리하는 기능을 제공한다.
✨
● 컨버터를 사용 할 때는 종류를 몰라도 된다.
● 컨버터는 ConversionService 내부에서 숨겨진채 제공 된다.
■ 반환 타입, 파라미터 타입, 제네릭 등으로 ConversionService가 컨버터를 찾는다.
● 즉, 클라이언트는 ConversionService 인터페이스만 의존하면 된다.
■ 컨버터 등록과 사용의 분리
🔥 ISP(인터페이스 분리 원칙, Interface Segregation Principal)
🎯 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리하는 원칙
● DefaultConversionService
ConversionRegistry : 컨버터 등록
ConversionService: 컨버터 사용
● 인터페이스를 분리하면 컨버터를 사용하는 클라이언트는 필요한 메서드만 알면된다.
● ConversionRegistry 가 변경되어도 ConversionService와 연관이 없다.
● Spring은 내부적으로 위와같이 등록, 사용이 분리된 인터페이스들이 아주 많다
'Spring' 카테고리의 다른 글
[Spring] Spring Formatter (0) 2025.04.18 [Spring] Formatter (0) 2025.04.18 [Spring] Converter Interface (0) 2025.04.17 [Spring]TypeConverter (0) 2025.04.17 [Spring]WebMvcConfigurer (0) 2025.04.17
