# 3.4.4 ConversionService API

**`ConversionService`는 런타임에 타입 변환 로직을를 실행하기 위한 통합 API를 정의합니다.** Converter는 종종 다음과 같은 외관 인터페이스 뒤에 실행됩니다.

```java
package org.springframework.core.convert;

public interface ConversionService {

    boolean canConvert(Class<?> sourceType, Class<?> targetType);

    <T> T convert(Object source, Class<T> targetType);

    boolean canConvert(TypeDescriptor sourceType, TypeDescriptor targetType);

    Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType);

}
```

**대부분의 `ConversionService`구현은 Converter를 등록하기 위한 SPI를 제공하는 `ConverterRegistry`도 구현합니다. 내부적으로, `ConversionService`구현은 등록된 Converter에 위임하여 타입 변환 로직을 수행합니다.**

**강력한 `ConversionService`구현체는 `core.convert.support` 패키지에서 제공됩니다. `GenericConversionService`는 대부분의 환경에서 사용하기에 적합한 범용 구현입니다. `ConversionServiceFactory`는 일반적인 `ConversionService`구성을 작성하기 위해 편리한 팩토리를 제공합니다.**&#x20;

{% hint style="info" %}
ConversionService :  **여러 종류의 컨버터를 이용해서 하나 이상의 타입 변환 서비스를 제공해주는 오브젝트를 만들 때 사용하는 인터페이스다.** 보통 ConversionService 를 구현한 GenericConversionService 클래스를 빈으로 등록해서 사용하면 된다.

사용자 필요에 의해서 추가로 개발한 Custom Converter들을 사용하려면 Converter도 역시 PropertyEditor처럼 등록이 필요하다. 한가지 다른 점은 **각각의 Converter를 개별적으로 등록하는 것이 아니라, 모든 Converter를 가지고 변환 작업을 처리하는 ConversionService를 Bean으로 등록한 후, ConversionService Bean을 필요한 곳에서 Inject 받아서 사용한다는 것이다.**
{% endhint %}
