ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 리플렉션 (reflection) 에 대해 알아보자!
    Language/Java 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
    반응형

    'Language > Java' 카테고리의 다른 글

    [Java] Serializable 이란?  (1) 2025.04.23

    댓글

Designed by Tistory.