where절 파라미터 방식으로 앞선 기능을 구현해 보자.

public List<MemberTeamDto> search(MemberSearchCondition condition) {
	return queryFactory
			.select(new QMemberTeamDto(
					member.id.as("memberId"),
					member.username,
					member.age,
					team.id.as("teamId"),
					team.name.as("teamName")
			))
			.from(member)
			.leftJoin(member.team, team)
			.where(
					usernameEq(condition.getUsername()),
					teamNameEq(condition.getTeamName()),
					ageGoe(condition.getAgeGoe()),
					ageLoe(condition.getAgeLoe())
			)
			.fetch();
}

private BooleanExpression usernameEq(String username) {
	return hasText(username) ? member.username.eq(username) : null;
}

private BooleanExpression teamNameEq(String teamName) {
	return hasText(teamName) ? team.name.eq(teamName) : null;
}

private BooleanExpression ageGoe(Integer ageGoe) {
	return ageGoe != null ? member.age.goe(ageGoe) : null;
}

private BooleanExpression ageLoe(Integer ageLoe) {
	return ageLoe != null ? member.age.loe(ageLoe) : null;
}
private BooleanExpression ageBetween(Integer ageLoe, Integer ageGoe) {
	return ageLoe != null && ageGoe != null ? ageLoe(ageLoe).and(ageGoe(ageGoe)) : null;
}

영한님이 추천하고 선호하는 방식이다.