java/객체지향

15. import문, static import문

VanillaSky7 2023. 1. 18. 02:00

import문


import문은 사용할 클래스의 패키지를 (컴파일러에게) 알려주는 역할을 합니다. 따라서 해당 패키지명을 생략할 수 있게 됩니다.

 

 

1
2
3
4
5
6
7
8
public class importExam {
 
    public static void main(java.lang.String[] args) {
        
        java.lang.System.out.println("import문 테스트!");
        
    }
}
cs

 

우리가 자바를 접하면서 가장 처음 사용했던 System 그리고 String과 같은 클래스들은 3행과 5행처럼 원래는 해당 클래스가 속한

 

패키지를 알려주어야 했습니다. 하지만 import문을 선언하지 않아도 기본적으로 사용할 수 있도록 지정해놓은 것 뿐이었습니다.

 

import java.lang.*;

 

혹은 위와 같은 방식으로 import문을 통해 해당 패키지명을 생략할 수 있습니다.

 

(import 선언은 곧 뒤이어 나옵니다! 또한 java.lang은 가장 기본이 되면서 중요한 패키지입니다. 해당 패키지에 어떠한 클래스들이 있는지

 

등과 같은 자세한 사항은 해당 키워드로 검색을 권장드립니다!)


import문 선언


import문을 선언하는 방법은 두 가지로 나뉘게 됩니다.

 

첫 번째는 import 패키지명.클래스명;

 

두 번째는 import 패키지명.*;

 

이때, import문의 위치는 아래 예제 코드의 3행과 같이 패키지 선언문과 클래스 선언문 사이가 됩니다!

1
2
3
4
5
6
7
8
9
10
11
12
package com.vanilla.javaStudy
 
import java.lang.*;
 
public class importExam {
 
    public static void main(java.lang.String[] args) {
        
        java.lang.System.out.println("import문 테스트!");
        
    }
}
cs

 

 

첫 번째 방식과 같이 명확하게 해당 클래스를 알려줄 수 있고 혹은 두 번째 방식과 같이 해당 패키지에 속한 모든 클래스를 알려줄 수도

 

있습니다. 

 

import문을 선언할 때 유의하실 점이 몇 가지 있습니다.

 

예를 들어 java.lang 패키지와 java.util 패키지에 ABC라는 똑같은 이름의 클래스가 각각 속해있다고 해보겠습니다.

 

클래스 선언문 내에서 ABC라는 클래스를 사용하려고 할 때, java.lang 패키지의 ABC 클래스를 사용해야 하는 것인지와

 

java.util 패키지의 ABC 클래스를 사용하는 것인지가 명확하지 않게 됩니다. 따라서 이럴 때에는 명확하게 어떤 패키지를 사용하는지

 

해당 클래스 앞에 붙여주셔야 합니다. ex) java.lang.ABC

 

또한 java.lang과 java.util은 모두 java 패키지에 속하기 때문에 import java.*; 와 같은 방식으로 선언하실 수도 있지만 이는 의미가

 

달라집니다. 그 이유는 저 *(애스터리스크) 는 해당 패키지에 속한 모든 클래스들을 의미하므로 lang과 util 패키지는 포함하지

 

않기 때문입니다.


static import문


static import문을 사용하게 되면 앞에 붙은 클래스명 또한 생략가능하게 해줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
import static java.lang.System.out;
import static java.lang.Math.*;
 
public class importExam {
 
    public static void main(java.lang.String[] args) {
        
        out.println("Hello World!");
        out.println(random());
        
    }
}
cs

 

1행과 2행에서 java.lang 패키지에 속한 System과 Math를 static import문을 통해 사용해보려고 합니다.

 

그러면 8행과 같이 System이라는 클래스명과 random() 메서드 앞의 Math 클래스명을 생략해줄 수 있음을 볼 수 있습니다.

 

참고) 2행의 애스터리스크(*)를 통해 해당 클래스 멤버(변수 및 메서드)들을 클래스명 생략 후 사용 가능합니다!