Java의 import static

조홍식·2022년 9월 1일

Java 관련 정리

목록 보기
15/17

querydsl 공부 하던 중 import static이라는 문법을 봤다.

java 1.5부터 import static이라는 문법을 지원하고 있더라..

 //
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.ll.exam.qsl.user.entity;

import ...

public class QSiteUser extends EntityPathBase<SiteUser> {
    private static final long serialVersionUID = 1465624588L;
    //static으로 선언된 변수
    public static final QSiteUser siteUser = new QSiteUser("siteUser");
    ...

   
}

위의 Q클래스에서 siteUser는 static으로 선언된 변수이다.

이 변수를 다른 클래스에서 어떻게 사용할까 ?

import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class UserRepositoryImpl implements UserRepositoryCustom{

    private final JPAQueryFactory jpaQueryFactory;
    @Override
    public SiteUser getQslUser(Long id) {
        /*select * from siteuser where id = 1*/

        return jpaQueryFactory
                .select(QSiteUser.siteUser)
                .from(QSiteUser.siteUser)
                .where(QSiteUser.siteUser.id.eq(id))
                .fetchOne();
    }
}

return문에서 QSiteUser클래스를 붙여 정적변수를 사용하고 있다.
이코드를 import static을 사용하여 다음과 같이 바꿔봅시다.

package com.ll.exam.qsl.user.entity;

import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;

import static com.ll.exam.qsl.user.entity.QSiteUser.siteUser;

@RequiredArgsConstructor
public class UserRepositoryImpl implements UserRepositoryCustom{

    private final JPAQueryFactory jpaQueryFactory;
    @Override
    public SiteUser getQslUser(Long id) {
        /*select * from siteuser where id = 1*/

        return jpaQueryFactory
                .select(siteUser)
                .from(siteUser)
                .where(siteUser.id.eq(id))
                .fetchOne();
    }
}

import static com.ll.exam.qsl.user.entity.QSiteUser.siteUser;
위 코드를 추가함으로써 QSiteUser 클래스의 siteuser 변수를 클래스명을 사용하지않고 직접 사용할 수 있게되었다. 따라서 조금 더 가독성 좋고 깔끔한 코드가 된다.

주의할점은 import static을 사용하는 클래스에 동일한 네임의 변수와 메서드가 있다면 해당 것을 사용하게 되므로 잘 확인해가며 사용해야한다.

profile
work hard!

0개의 댓글