Language/Java
[Java] ObjectMapper vs MapStruct
JB1104
2025. 2. 5. 14:38
728x90
반응형
SMALL
ObjectMapper
- Jackson 라이브러리의 핵심 클래스
- 주로 Java 객체와 JSON 간의 변환에 사용
특징
- JSON 직렬화 (Java 객체 -> JSON) 및 역직렬화 (JSON -> Java 객체) 수행
- 리플렉션을 사용하여 런타임에 객체 매핑을 수행
- 다양한 어노테이션을 통해 매핑 동작을 커스터마이즈 가능
MapStruct
- Java 객체 간 매핑을 위한 코드 생성 도구
특징
- 컴파일 시점에 매핑 코드를 생성
- 주로 DTO와 Entity 간 변환에 사용
- 어노테이션 기반으로 동작하며, 인터페이스 정의만으로 구현체를 자동 생성
리플렉션(Reflection)
Java 프로그래밍 언어의 중요한 기능 중 하나로, 실행 중인 Java 프로그램이 자기 자신을 검사하거나 내부의 속성을 조작할 수 있게 해주는 기능. 구체적인 Class Type을 알지 못하더라도 해당 Class의 method, type, variable들에 접근할 수 있도록 해주는 자바 API
Reflection은 Runtime에 Class Type을 모르는 채로 객체를 생성하고 이용하기 때문에 동적 바인딩을 제공
MapStruct를 사용하면 객체 간 변환 작업을 효율 적으로 처리하고, 코드의 중복을 줄이며 유지보수성을 향상
예시 코드
public class Source {
private String name;
private int age;
// getters and setters
}
public class Destination {
private String name;
private int age;
// getters and setters
}
@Mapper
public interface SourceDestinationMapper {
SourceDestinationMapper INSTANCE = Mappers.getMapper(SourceDestinationMapper.class);
Destination sourceToDestination(Source source);
}
1. MapStruct 사용 예시
Source source = new Source();
source.setName("John");
source.setAge(30);
Destination destination = SourceDestinationMapper.INSTANCE.sourceToDestination(source);
System.out.println(destination.getName()); // 출력: John
System.out.println(destination.getAge()); // 출력: 30
2. ObjectMapper 사용 예시
public class Person {
private String name;
private int age;
// getters and setters
}
public class ObjectMapperExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Java 객체를 JSON 문자열로 변환
Person person = new Person();
person.setName("John");
person.setAge(30);
String jsonString = mapper.writeValueAsString(person);
System.out.println(jsonString); // 출력: {"name":"John","age":30}
// JSON 문자열을 Java 객체로 변환
String json = "{\"name\":\"Jane\",\"age\":25}";
Person result = mapper.readValue(json, Person.class);
System.out.println(result.getName()); // 출력: Jane
System.out.println(result.getAge()); // 출력: 25
}
}
이 예시들에서 볼 수 있듯이, MapStruct는 컴파일 시점에 생성된 매퍼를 통해 객체 간 변화를 수행하며,
ObjectMapper는 런타임에 리플렉션을 사용하여 JSON과 Java 객체 간의 변환을 수행
차이점
- 용도
ObjectMapper는 주로 Java 객체와 JSON 간 변환에 사용
MapStruct는 Java 객체 간 변환에 특화 - 동작 시점
ObjectMapper는 런타임에 리플렉션을 사용하여 매핑을 수행
MapStruct는 컴파일 시점에 매핑 코드를 생성 - 성능
MapStruct가 컴파일 시점에 코드를 생성하므로 일반적으로 더 높은 성능 제공 - 유연성
ObjectMapper는 동적인 JSON 구조 처리에 더 유연
MapStruct는 정적인 객체 구조간 매핑에 더 적합 - 사용 방식
ObjectMapper는 메서드 호출을 통해 직접 변환을 수행
MapStruct는 인터페이스 정의를 통해 매핑 규칙을 선언적으로 지정
결론적으로 ObjectMapper는 JSON 처리에 특화되어 있고, MapStruct는 Java 객체 간 효율적인 매핑에 중점
프로젝트의 요구사항에 따라 적절한 도구를 선택하거나 두 도구를 함께 사용할 수 있다.
거대한 시스템을 만들다 보면, 다양한 도메인 영역들이 있고, 이를 변환하는 작업은 개발자에게 있어서 매우 귀찮고,
실수하기 딱 좋고, 번거로운 경우가 굉장히 많다.
이러한 실수를 하지 않게 검증된 라이브러리를 사용하는 것이 좋다.
728x90
반응형
LIST