본문 바로가기

Java

Static Import 에 대해

전자정부표준프레임웍을 점점 많은 곳에서 사용하는 것같아서 사용해보려고 설치를 했다. 근데... 내가 현재 사용하는 환경과 좀 다르다... 그래서 구조와 셋팅을 보려고 찾아보니 모르던 코드를 발견했다. 그것은 import static ... 이다.

궁금해서 검색을 해보니 자바 1.5에서 추가된 기능이란다. 난 1.6부터 시작했는데... 왜 몰랐지....


특징은 이렇다. 다른 클래스의 맴버 변수나 맴버 메서드를 경로를 생략하고 사용할 수 있다. Static Import 로 선언하기 위해서는 static으로 정의된 맴버여야한다. 예를 들어

import static java.lang.Math.PI;


이렇게 선언했다고 하자. 위에서 보통은 static 빼고 맨 끝에 PI 도 없을 것이다. 일반적인 import문을 정의하면 아래와같이 사용할 것이다.

double r = Math.cos(Math.PI * theta);


여기서 코드를 더 줄일 수 있게 해주는 것이 Static Import 이다. 사용할 경우에 아래와 같이 정의할 수 있다.

double r = cos(PI * theta);


코드가 좀 더 눈에 잘 들어오기는 하는데 뭔가 맴버로 착각할 듯하다. 실무에서는 클래스 이름이 긴 경우도 있으니 그럴 때 사용하면 좋을 듯하다. 하지만 남용하면 시간이 지나 소스가 가물가물 할 때 다시 열어보면 소스를 파악하기 힘들 것같다. 아니면 다른 사람이 남용한 소스를 분석하게 되면 스트레스가 쌓일 것같다. 분석에 어려움이 있으니 한 클래스에 1~2개 정도만 사용하는게 좋을 것이다.



찾아보다 보니 좋은 정보가 있다. 보통 이클립스를 사용하다보면 Ctrl + Shift + O 단축키를 많이 사용하게 될 것이다.

Static Import 를 사용할 때 모든 맴버를 사용할 경우 간단하게 다음과 같이 선언하면 된다.

import static java.lang.Math.*;


그런데 단축키를 누르면 이게 사라지고 각각의 멤버 이름으로 바뀌게 된다. 예를 들어

package staticTest;


public class StaticClass {

public static int cnt;

public static String name;

public static double point;


}


StaticClass 클래스가 있다. 이걸 import해서 코드를 작성하면

package staticTest;


import static staticTest.StaticClass.*;


public class TestMain {


public static void main(String[] args) {

// TODO Auto-generated method stub

int reCnt = cnt;

String reName = name;

double rePoint = point;

}


}


이렇게 된다. 근데 여기서 Ctrl + Shift + O 단축키를 누르면 아래처럼 된다.

package staticTest;


import static staticTest.StaticClass.cnt;

import static staticTest.StaticClass.name;

import static staticTest.StaticClass.point;


public class TestMain {


public static void main(String[] args) {

// TODO Auto-generated method stub

int reCnt = cnt;

String reName = name;

double rePoint = point;

}


}


import가 1개에서 3개로 바뀌었다. 이게 종종 거슬릴 수도 있을 것이다. 그럼 이클립스에서 설정을 바꿔서 한줄로 나오게 해보자.



Java EE의 경우에는 Java Code Style > Organize imports에 있다. Number of static imports nedded for .* 를 수정하면 된다. 기본값은 99인데 2로 하면 2개 이상인 경우에 *으로 바꿔준다. 


Static Import 는 적당히 사용하면 아주 유용한 코드가 될 것같다.



참고

http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html

http://stylekai.tistory.com/308

http://whiteship.tistory.com/1416