본문 바로가기

프로그래밍

자바 static import는 무엇인가

static import는 무엇인가?

static import는 일반적인 import와는 다르게 메소드나 변수를 패캐지, 클래스명없이 접근가능하게 해줍니다.

import static java.lang.Math.*;

public class StaticImportCase {
    public static void main(String[] args) {
        Double pi = Math.PI;
        Double pi2 = PI;
    }
}

위 코드를 보면 Math클래스에 대해 static import를 하고 있습니다.

static import를 해줌으로써 Math.PIPI로 사용할 수 있게 됬습니다.

 

굳이 이렇게까지 줄일 필요가 있을까? 싶습니다.

그러나 필요할 때가 있습니다.

테스트 프레임워크인 JUnit을 사용하다보면 static import의 적절한 예를 살펴볼 수 있습니다.

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class StaticImportTestCase {
    @Test
    public void nonStaticImport() {
        Assert.assertThat(1, CoreMatchers.is(1));
    }

    @Test
    public void staticImport() {
        assertThat(1, is(1));
    }
}

위의 테스트는 static import를 적용하지 않았을 때이고, 아래의 테스트는 static import를 적용했을 때입니다.

static import를 하게 되면 코드를 읽을 때, That ~ is ~로만 읽어서 한 눈에 의도를 파악할 수 있습니다.

이 테스트는 "That is 1"이 참인지 거짓인지 판단하는 것입니다. 여기서 That은 1입니다.

즉, 1은 1이다. 라는 것을 영어문장 읽듯이 코드를 읽을 수 있습니다.

 

만약 static import를 안 했다면 테스트의 의도가 한 눈에 들어오지 않을 것입니다.

지금은 비교적 간결한 테스트이기 때문에 굳이 static import하지 않아도 괜찮을지 모르겠지만, 길어지면 조금 고생스럽습니다.