[JAVA] import와 static import 차이는???
import문은 컴파일 시 컴파일러에게 패키지에 대한 정보를 제공하여 해당 클래스를 찾을 수 있게 도와줍니다.
자바에서 기본적으로 제공하는 java.lang패키지가 아닌 외부 클래스 파일이나 라이브러리를 사용할 때 import문을 사용합니다.
만약 import문을 사용하지 않을 경우 패키지명.클래스명 형식으로 사용 할 수도 있으나 보기도 좋지 않을 뿐더러 작성하기도 너무 불편합니다.
public class ProjectTest {
public static void main(String[] args) {
java.util.Scanner sc = new java.util.Scanner(System.in);
int i = sc.nextInt();
}
}
|
import문을 사용 함으로써 패키지명을 생략하여 사용 할 수 있게해줍니다.
import java.util.Scanner;
public class ProjectTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
}
}
|
여기서 import문에 static을 붙이면 어떤 차이가 있을까요.
큰 차이가 있지는 않지만 아래 예제를 보면서 차이를 찾아 봅니다.
import java.lang.Math.*; //이해를 돕기 위해 사용
public class ProjectTest {
public static void main(String[] args) {
double math = Math.PI;
System.out.println(math);
}
}
|
import static java.lang.Math.*;
import static java.lang.System.*;
public class ProjectTest {
public static void main(String[] args) {
double math = PI;
out.println(math);
}
}
|
차이가 보이시나요???
클래스명 Math, System 없이 Math, System클래스 안에 정의된 멤버를 사용했습니다.
import에 static을 붙이면 import된 정적 멤버 변수나 정적 메소드를 클래스의 이름 없이도 사용할 수 있습니다.
(static 변수, static 메소드만 사용 가능)
이러한 정적 멤버를 더 간편하게 사용하기 위해 JDK 1.5부터 static impot를 지원하게 되었습니다.
static import를 사용함으로써 마치 현재 클래스의 멤버 처럼 사용할 수 있게 편리하며 경우에 따라 코드가 길어질 때 간결하게 함으로써 좀 더 사용 의도를 알아 볼수 있습니다.
그러나 남용해서 사용하다 보면 혼동을 줄 수도 있기에 적절히 사용해야 합니다.
만약 static import한 클래스들에서 같은 이름의 멤버가 있으면 어떻게 될까요??
import static java.lang.Integer.*;
import static java.lang.Long.*;
public class ProjectTest {
public static void main(String[] args) {
System.out.println(MAX_VALUE); //에러
System.out.println(Integer.MAX_VALUE);
System.out.println(Long.MAX_VALUE);
}
}
|
이럴 경우 멤버 이름만 작성하여 사용하려고 하면 컴파일 에러가 발생합니다.
어느 클래스의 멤버를 접근해야 할 지 애매해지게 되는 것이죠.
해당 멤버 앞에 클래스 명을 붙여 사용 할 수 있습니다.
다만 이러면 static import를 사용하는 이유가 없어지게 되니 참고하시길 바래요