[Spring] TypeConverter

이연우·2025년 8월 18일

TIL

목록 보기
77/100

🔤 타입 변환이란?

  • 스프링의 데이터 바인딩 과정에서
    문자열 ↔ 객체, 객체 ↔ 객체타입을 변환해 주는 메커니즘
  • 웹 요청 파라미터는 기본이 문자열(String)이므로,
    실제 로직에서 쓰려면 숫자, 도메인 객체 등으로 바꿔야 함

🧪 예시 1) 문자열 → 숫자 (수동 변환, HttpServletRequest)

@GetMapping("/param")
public void param(HttpServletRequest request) {
    String stringExample = request.getParameter("example"); // 항상 String
    Integer integerExample = Integer.valueOf(stringExample); // 직접 변환
    log.info("integerExample = {}", integerExample);
}

→ 요청 파라미터는 항상 문자열로 들어옴
→ 다른 타입으로 쓰려면 검증 + 변환 로직을 직접 넣어야 함

⚡ 예시 2) 자동 변환 (@RequestParam)

@GetMapping("/v2/param")
public void paramV2(@RequestParam Integer example) {
    log.info("example = {}", example); // 자동으로 Integer 바인딩
}

→ 추가 코드 없이 문자열 "10" → 숫자 10으로 자동 바인딩

✅ 결론 (요점)

  • 요청 파라미터의 10은 실제로는 문자열 "10"
  • @RequestParam을 쓰면 "10" → 10(Integer)자동 변환
  • 같은 방식이 @ModelAttribute, @PathVariable에도 적용됨
    스프링 내부에서 타입을 자동 변환

🧩 Converter 인터페이스란?

  • "특정 타입 → 다른 타입" 변환 로직을 캡슐화하는 스프링 인터페이스
  • 변환을 일관되게 재사용할 수 있음

🆕 새로운 타입 변환 예시 (커스텀 타입)

  • 요청: localhost:8080/type-converter?person=wonuk:120
  • 목표: "wonuk:120" 같은 문자열Person 객체로 변환
public class Person {
    private String name;
    private String age;
}

→ 예시 변환: wonuk:120name: wonuk, age: 10

🛠️ Converter 인터페이스

  • 스프링이 인터페이스 제공implements 해서 등록하면 됨
  • 모든 타입(T)에 적용 가능
  • 새로운 타입을 만들고 싶을 때, 그 타입에 맞춘 Converter를 구현·등록해서 사용

🧠 요약 정리

구분설명예시 / 특징
타입 변환 (Type Conversion)스프링에서 문자열 ↔ 객체, 객체 ↔ 객체 변환을 처리하는 기능웹 요청 파라미터 "10"Integer 10
수동 변환HttpServletRequest로 받은 문자열을 직접 변환Integer.valueOf(stringExample)
자동 변환 (@RequestParam)스프링이 내부적으로 TypeConverter를 사용해 문자열을 숫자·객체로 자동 변환@RequestParam Integer example
적용 범위@RequestParam, @ModelAttribute, @PathVariable 등에서 자동 변환 지원"10"Integer 10
Converter 인터페이스스프링이 제공하는 타입 변환 인터페이스. implements 후 Bean 등록하면 사용 가능Converter<String, Person>
새로운 타입 변환 예시"wonuk:120" 문자열을 Person 객체로 변환name=wonuk, age=10
특징- 변환 로직 캡슐화
- 재사용성 높음
- 일관성 있는 타입 변환 가능
모든 타입(T)에 적용 가능

0개의 댓글