Language/Java
[Java] 리플렉션 (reflection) 에 대해 알아보자!
hoonylab
2025. 4. 23. 15:13
728x90
반응형
Java 리플렉션(Reflection)이란?
Java의 리플렉션은 런타임에 객체의 클래스 정보에 접근하거나 메서드를 호출하고, 필드를 읽거나 쓸 수 있게 해주는 기능입니다. 보통은 컴파일 타임에 클래스 정보를 사용하지만, 리플렉션을 사용하면 프로그램 실행 중에 유연하게 객체를 다룰 수 있습니다.
ObjectMapper, ModelMapper, MapStruct와 리플렉션
1. ObjectMapper (Jackson)
ObjectMapper
는 JSON과 Java 객체 간의 직렬화/역직렬화를 담당하는 Jackson 라이브러리의 핵심 클래스입니다. 내부적으로 리플렉션을 사용하여 객체의 필드를 분석하고 값을 읽거나 씁니다.
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonString, User.class); // JSON -> Java 객체
이때 User.class
의 필드를 리플렉션으로 분석하여 값을 자동으로 매핑합니다.
2. ModelMapper
ModelMapper
는 DTO와 Entity 간의 변환을 자동화해주는 라이브러리입니다. 내부적으로 리플렉션을 사용하여 두 객체의 필드 이름과 타입을 비교하고 값을 복사합니다.
ModelMapper modelMapper = new ModelMapper();
UserDto userDto = modelMapper.map(user, UserDto.class);
User
객체의 필드 정보를 리플렉션으로 읽고, UserDto
에 맞게 자동 매핑합니다.
3. MapStruct
MapStruct
는 컴파일 타임에 매핑 코드를 생성하는 라이브러리입니다. 즉, 리플렉션을 사용하지 않고 성능을 최적화합니다.
@Mapper
public interface UserMapper {
UserDto toDto(User user);
}
MapStruct는 어노테이션 기반으로 코드를 분석하고, 직접 매핑 코드를 생성하기 때문에 리플렉션을 사용하지 않습니다. 이는 런타임 성능이 중요한 상황에서 유리합니다.
정리
- ObjectMapper: 런타임 리플렉션 사용 (유연하지만 성능은 다소 낮을 수 있음)
- ModelMapper: 리플렉션 사용 (간편하지만 대규모 변환에는 부적합할 수 있음)
- MapStruct: 컴파일 타임 코드 생성 (성능 우수, 명시적인 매핑 필요)
728x90
반응형