# 3.4.6 프로그래밍 방식으로 ConversionService 사용하기

**프로그래밍 방식으로 `ConversionService`인스턴스로 작업하려면, 다른 빈과 마찬가지로 참조를 주입할 수 있습니다.** 다음 예제에서는 이를 수행하는 방법을 보여줍니다.&#x20;

```java
@Service
public class MyService {

    @Autowired
    public MyService(ConversionService conversionService) {
        this.conversionService = conversionService;
    }

    public void doIt() {
        this.conversionService.convert(...)
    }
}
```

대**부분의 경우에 `targetType`을 지정하는 `convert`메소드를 사용할 수는 있지만, 매개 변수가 있는 요소의 컬렉션과 같이 더 복잡한 타입들에서는 작동하지 않습니다.** 예를 들어, `Integer`의 `List`를 `String`의 `List`로 변환하려면 원본 및 대상 타입에 대한 공식 정의를 제공해야 합니다.

다행스럽게도, `TypeDescriptor`는 다음 에제와 같이 다양한 옵션을 사용하여 간단하게 수행할 수 있습니다.

```java
DefaultConversionService cs = new DefaultConversionService();

List<Integer> input = ....
cs.convert(input,
    TypeDescriptor.forObject(input), // List<Integer> type descriptor
    TypeDescriptor.collection(List.class, TypeDescriptor.valueOf(String.class)));
```

`DefaultConversionService`는 대부분의 환경에 적합한 컨버터를 자동으로 등록합니다. 여기에는 컬렉션 변환기, 스칼라 변환기 및 기본 `Object`-to-`String`Converter가 포함됩니다. `DefaultConversionService`클래스의 정적 `addDefaultConverters`메서드를 사용하여 `ConverterRegistry`에 동일한 변환기를 등록할 수 있습니다.

값 타입에 대한 컨버터는 배열 및 컬렉션에 다시 사용되므로, 표준 컬렉션 처리가 적절하다고 가정할 때 특정 컨버터를 만들어 `S`의 `Collection 을 T`의`Collection으로`변환할 필요가 있습니다.&#x20;
