이 글은 Java 개발 과정에서 Object 타입 데이터를 특정 클래스(Node 클래스)로 변환하는 과정을 순서대로 정리한 내용입니다. Object가 실제 객체, Map, JSON 문자열 등 다양한 형태일 수 있기 때문에 각 경우를 안전하게 처리하는 방법을 기술 중심으로 설명합니다.
핵심 요약
Object를 특정 클래스 타입으로 변환하는 방법은 다음 세 가지 흐름으로 나눌 수 있습니다.
- 실제 객체라면 단순 캐스팅
- Map 구조라면 수동 매핑 또는 Jackson convertValue
- JSON 문자열이라면 ObjectMapper readValue
문제 정의
Java 코드에서 Object 타입으로 전달된 데이터를 Node 객체로 변환해야 하는 상황이었습니다. 전달된 Object는 다음 세 가지 형태 중 하나일 수 있다는 점이 문제의 핵심이었습니다.
- 실제 Node 객체
- Map<String, Object> 구조
- JSON 문자열
단순 캐스팅 방식
Object가 실제로 Node 객체인 경우입니다.
if (obj instanceof Node) {
Node node = (Node) obj;
}
이 방식은 가장 간단하지만, 실제 타입이 Node일 때만 사용할 수 있다는 제한이 있습니다.
Map 구조 변환 방식
Map<String, Object> 형태를 받는 경우는 API 응답 처리에서 많이 발생합니다. 두 가지 접근 방식이 있습니다.
Map 수동 매핑
Map<String, Object> map = (Map<String, Object>) obj;
Node node = new Node();
node.setId((Long) map.get("id"));
node.setName((String) map.get("name"));
node.setChildren((List<Node>) map.get("children"));
Map 구조를 정확히 알아야 한다는 전제가 있습니다.
ObjectMapper convertValue 자동 변환
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = (Map<String, Object>) obj;
Node node = mapper.convertValue(map, Node.class);
JSON 문자열 변환 방식
Object가 JSON 형태의 문자열이라면 readValue를 사용합니다.
ObjectMapper mapper = new ObjectMapper();
String json = (String) obj;
Node node = mapper.readValue(json, Node.class);
JSON → 객체 변환의 일반적인 접근 방식입니다.
리스트 변환 방식
Object가 JSON 배열이거나 List
List<Node> list = mapper.convertValue(
obj,
new TypeReference<List<Node>>() {}
);
TypeReference를 사용해야 리스트가 올바르게 생성됩니다.
공통 변환 메소드
상황마다 다른 변환 코드를 작성하지 않기 위해 공통 유틸리티 메소드를 둘 수 있습니다.
public static Node convertToNode(Object obj) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.convertValue(obj, Node.class);
} catch (IllegalArgumentException e) {
throw new RuntimeException("Node 변환 과정에서 오류가 발생했습니다.", e);
}
}
Map, JSON, 객체 등 다양한 입력값을 하나의 변환 규칙으로 처리할 수 있는 방식입니다.
예시 클래스
public class Node {
private Long id;
private String name;
private List<Node> children;
// getters, setters
}
결론 및 정리
Object 타입을 특정 클래스 타입으로 변환하는 과정은 입력 데이터의 형태에 따라 방식이 달라집니다. 실제 객체라면 단순 캐스팅으로 충분하지만, Map이나 JSON은 ObjectMapper를 사용하는 것이 가장 효율적이고 안전한 방식입니다. 특히 convertValue 기능은 중첩 구조를 자동 변환할 수 있어 실무에서 유용합니다.
'개발 (Development) > Java' 카테고리의 다른 글
| [Java] 특정 ID를 가진 노드의 하위 계층(Leaf)을 찾는 방법 (0) | 2025.11.28 |
|---|---|
| [Java] 객체 리스트를 특정 속성으로 정렬하는 방법 (2) | 2025.10.06 |
| [Java/Spring Boot] "No thread-bound request found" 에러 원인과 해결법 (0) | 2025.09.19 |
| [Java/Spring Boot] JdbcTemplate으로 여러 데이터베이스 연결하기 (0) | 2025.09.14 |
| [Java/Spring Boot] Spring Boot에서 OAuth2 인증 401 오류 해결하기 (0) | 2025.09.14 |