import 는 기존에 이클립스에서 자바 프로젝트를 불러올 때 사용하였다.
이번에 다룰 import는 그와 다른 예약어 import 를 말한다.
import의 사전적 뜻은 수입, 수입품 이다. 즉 외부에서 가져온다는 것을 의미한다.
자바에서의 import는 뜻과 같이 다른 패키지의 클래스를 불러오는 것이다.
클래스를 만들 때 임포트 되는 것은 기본적으로 동일 패키지 내의 클래스들과 java.lang 패키지이다.
하지만 그 외에 다른 패키지의 클래스에 접근하여 원하는 기능을 가져와야할 경우도 많다.
1. import 사용하기
현재까지 가장 많이 임포트한 클래스는 입력받기 위해 사용한 Scanner 이다.
그리고 Scanner를 사용하기 위해 package 하단에서 아래 문장을 볼 수 있었다.
import java.util.Scanner;
이 코드의 의미는 " java.util 패키지의 Scanner 를 가져오겠다" 라는 의미이며 실제로 java 폴더를 찾아보면
존재한다는 것을 알 수 있다. C:\Program Files\Java\jdk1.8.0_221 에서 src 압축파일을 살펴보자.

위 처럼 Scanner 가 존재한다는 것을 확인할 수 있다.
2. 내가 만든 클래스 import 하기
만약 자신이 만든 클래스를 임포트하고 싶다면 다음과 같이 해주면 된다.

사진 설명을 입력하세요.
좌측의 패키지 익스플로러와 코드를 보면 다른 패키지에서 클래스를 불러온 것을 확인할 수 있다.
만약 클래스를 임포트하지 않는 다면 다음과 같은 일이 발생한다.

에러를 살펴보면 Score를 해결할 수 없다고 뜨며 그 아래에 해결방법으로 import 하라는 것을 볼 수 있다.
3. 패키지 내의 모든 클래스를 import 하는 방법
만약 패키지 내에 여러 클래스를 import 한다 하면 각 클래스마다 한 줄씩 import 를 작성하여야 한다.
만약 import 할 패키지가 100개라면 100줄의 import 를 작성해야할까?
이 때 * (애스터 리스크) 를 사용하면 패키지 내 모든 클래스를 import 할 수 있다.

위 이미지를 보면 동일한 코드이나 import 부분만 * 로 바뀐 것을 확인할 수 있다.
4. static (클래스) 변수 와 static (클래스) 메소드를 import 하는 방법
JDK 5부터는 import static 이 추가되어 static 으로 선언된 클래스 변수 또는 클래스 메소드를 사용할 수 있다.
아래 코드를 보자.
package com.pack;
public class TestClass {
public static String str = "Test";
public static void testClass_Method() {
System.out.println("testClass_Method() Call!!");
}
}
com. pack 패키지의 TestClass 를 선언하여 str 과 testClass_Method() 를 static 으로 선언하였다.
package com.pack.sub;
import com.pack.TestClass;
public class UseClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
TestClass.testClass_Method();
System.out.println(TestClass.str);
}
}
TestClass 를 임포트하여 static 으로 선언된 변수와 메소드를 사용하는 것을 확인할 수 있다.

이제 두 번째 코드를 수정하여 import static 을 사용해 보면 다음과 같다.
package com.pack.sub;
import static com.pack.TestClass.str;
import static com.pack.TestClass.testClass_Method;
public class UseClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
testClass_Method();
System.out.println(str);
}
}
차이점은 다음과 같다.
import -> import static
com.pack.TestClass -> com.pack.TestClass.str , com.pack.TestClass.testClass_Method
TestClass.testClass_Method() -> TestClass.testClass_Method()
System.out.println(TestClass.str) -> System.out.println(TestClass.str)
즉, import static 을 사용하면 다른 패키지의 static 변수, 메소드 이지만 변수명과 메소드명 만으로도
쉽게 사용할 수 있다.
만약 일일이 import static 으로 선언하기 귀찮다면 다음과 같이 사용할 수 있다.
import static com.pack.TestClass.* ;
package com.pack.sub;
import static com.pack.TestClass.*; // 애스터 리스크(*) 사용
//import static com.pack.TestClass.testClass_Method;
public class UseClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
testClass_Method(); // 정상적으로 사용 가능
System.out.println(str);
}
}

참고) 만약 import static 한 클래스 변수와 자신의 클래스 변수의 이름이 같다면?
package com.pack.sub;
import static com.pack.TestClass.str;
import static com.pack.TestClass.testClass_Method;
public class UseClass {
static String str = "내가 먼저다!"; // 이름이 같은 클래스 변수 생성
public static void main(String[] args) {
// TODO Auto-generated method stub
testClass_Method();
System.out.println(str);
}
}

실험 결과 자기 클래스의 클래스 변수가 우선 실행된다.