본문 바로가기
JPA

[QueryDsl] 동적 접근이란 무엇일까

by 슈슈슉민 2024. 10. 25.

자바에서 코드가 동작하는 레이어를 보면 컴파일 다음 런타임이다. 런타임은 프로그램이 실행되고 있는 환경이나 동작하는 시간을 말한다. 

 

우리가 코드를 다룰 때는 런타임에 접근 할 때와 컴파일에 접근 할 때 두가지 경우의 수가 생긴다. 컴파일때 접근하는 것을 정적 접근이라 하고 런타임을 동적 접근이라 한다. 예를 들어 설명하자면

 

1. 정적 접근 (QClass || EntityPath 사용)

// 컴파일 시점에 모든 것이 결정 == 정적이다.
Quser user = Quser.user;
user.name // 자동 완성 되지 않는가? == 타입 안전성이 보장된다.

 

2. 동적 접근 (PathBuilder 사용)

PathBuilder<User> user = new PathBuilder<>(User.class, "user);
String filedNmae = "name" // 이 값은 외부에 들어올 수 있다. == 동적이다.
user.get(fieldName) // 실제 실행 시점(런타임)에서 어떤 필드에 접근할 지 결정 됨

 

 

실제 사용 예시!

// 정렬 조건을 동적으로 받는 경우
public List<User> findUsers(String sortField, String sortDirection) {
	PathBuilder<User> user = new PathBuilder<>(User.class, "user);
    OrderSpecifier<?> order = sortDirection.equals("ASC")
    	? user.get(sortField).asc() // 런타임에 결정되는 필드로 정렬
        : user.get(sortField).desc();
        
    return jpaQueryFactory
    	.selectFrom(user)
        .orderBy(order)
        .fetch();
}

// 사용할 때
findUsers("name", "ASC");
findUsers("age", "DESC");

'JPA' 카테고리의 다른 글

[QueryDsl] 대량으로 수정하기  (0) 2025.04.08
Open Session in View  (0) 2024.04.25
[Relation] mappedBy  (1) 2023.07.27