java

    QueryDsl에서 DTO로 조회할 때 @QueryProjection 사용하기

    지난 포스트에서 QueryDsl을 사용해서 DTO를 조회할 때 다음과 같이 했습니다.import static org.프로젝트.account.entity.QAccount.account;import static org.프로젝트.member.entity.QMember.member;@RequiredArgsConstructorpublic class MemberRepositoryImpl implements MemberRepositoryCustom { private final JPAQueryFactory query; @Override public Optional findMemberProfile(Long memberId) { return Optional.ofNullable( query ..

    SpringDataJpa와 QueryDsl 함께 사용하기 (feat. @DataJpaTest)

    SpringDataJpa를 사용하면 JpaRepository를 implements 한 레포지토리를 통해 쉽게 쿼리문을 만들어 사용합니다.하지만 조금 더 복잡한 쿼리를 작성하려고 한다면 @Query 등을 사용하여 JPQL문을 작성해줘야 하죠.JPQL을 작성할 때에는 텍스트(ex - "select m.id from member m")로 작성해야 합니다.그러다 보면 자칫 오타가 나더라도 컴파일 시에는 확인할 수 없고 런타임에 발견되어 예상치 못한 문제가 발생될 수 있습니다.QueryDsl은 모두 Java 코드로 이뤄져 있어 컴파일 시에 오타를 확인할 수 있습니다.또한, 일부 로직을 메서드로 만들어 재사용할 수도 있죠.이러한 장점들은 복잡한 쿼리문을 작성할 때에 매우 유리하게 작용될 수 있다 생각합니다. 제가 ..

    [JAVA 8] Supplier

    Supplier interface 함수형 인터페이스를 공부하면서 Java가 기본으로 제공하는 인터페이스 중 Supplier를 알게 되었습니다. 이 인터페이스는 구현체에서 반환할 타입을 지정하고 추상 메서드인 get() 메서드를 재정의하여 지정된 타입의 값을 반환받는 아주 간단한 인터페이스입니다. 저는 이 인터페이스의 존재가 "굳이..?" 라는 생각이 들어서 찾아보니 Lazy Evaluation을 위해서 존재한다는 것을 찾게 되었습니다. Lazy Evaluation 이것은 불필요한 연산을 피하기 위해서 연산을 지연시키는 것을 뜻합니다. 뜻만 알아서는 존재의 이유를 잘 모르겠어서 예제를 통해 이해해 보겠습니다. 추상 메서드인 get() 메서드를 재정의하여 현재 시간을 time 변수에 저장하고 3초를 멈추었다..