Projections.bean()과 Projections.fields()는 QueryDSL에서 제공하는 메소드로, 쿼리 결과를 특정 클래스의 인스턴스로 맵핑하는 역할을 한다. -> 특정 필드만 선택적으로 조회하고 싶을 때 사용
둘 다 동일한 목적을 가지고 있지만, 내부적으로 사용하는 방식에 차이가 있다.
Projections.bean()
이 메소드는 JavaBean 스펙을 따르는 객체에 대한 프로젝션을 생성한다. JavaBean 스펙이란, 기본 생성자를 가지고 있고, getter와 setter 메소드를 통해 필드에 접근하는 클래스를 의미한다. Projections.bean() 메소드는 클래스의 기본 생성자를 이용해 인스턴스를 생성하고, 각 필드의 setter 메소드를 이용해 값을 설정한다. 따라서 이 메소드를 사용하려면, 대상 클래스가 기본 생성자와 필드에 대한 setter 메소드를 반드시 가지고 있어야 한다.
-> JavaBean 스펙에 따른 클래스의 구조에 의존
Projections.fields()
이 메소드는 Reflection API를 사용해 객체를 생성한다. Reflection API는 자바 코드 내에서 동적으로 클래스나 메소드를 로딩하고, 객체를 생성하거나 메소드를 호출하는 등의 작업을 할 수 있게 해주는 기능이다. Projections.fields() 메소드는 Reflection을 이용해 대상 클래스의 인스턴스를 생성하고, 필드에 직접 접근하여 값을 설정한다. 따라서 이 메소드를 사용하려면, 대상 클래스에 필드에 대한 setter 메소드가 없어도 된다. 하지만 Reflection은 보안과 성능 문제를 일으킬 수 있으므로 주의가 필요합니다.
-> 클래스의 구조에 상관 없이 필드에 직접 접근
'공부' 카테고리의 다른 글
[Spring] MapStruct 사용하기 (ModelMapper -> mapstruct 변환) (0) | 2023.11.08 |
---|---|
[Logging] @RestControllerAdvice를 이용한 에러 핸들링 (0) | 2023.11.05 |
[API] Kakao Login 구현하기 (1) (0) | 2023.10.20 |
[SQL] Index (0) | 2023.09.30 |
CHAR와 VARCHAR의 차이점 (0) | 2023.09.24 |