[Java] 패키지, import, static import
패키지
- 서로 관련된 클래스의 묶음
- 클래스는 클래스 파일(*. class), 패키지는 폴더. 하위 패키지는 하위 폴더
- 클래스의 실제 이름은 패키지를 포함한 이름이다. ex) java.lnag.String
- rt.jar는 클래스들을 압축한 파일, Java9부터 용량 문제로 사라졌다.
(참고로 jar파일은 jar.exe로 압축을 풀 수 있다.)
패키지 선언
- 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언한다.
- 같은 소스 파일의 클래스들은 모두 같은 패키지에 속한다.
- 패키지 선언이 없다면 클래스들은 이름없는 패키지(default package)에 속하게 된다.
package Testpackage;
public class Main {
public static void main(String[] args) {
}
}
class Main2{
//위 클래스도 Testpackage에 속한다.
}
Main 클래스와 Main2 클래스는 Testpackage에 속한다.
import
import를 사용한다면 클래스를 사용할 때 패키지 이름을 생략할 수 있다.
class Main2{
java.util.Scanner sc= new java.util.Scanner(System.in);
}
Scanner 클래스를 사용하기 위해서는 원래는 패키지의 이름을 귀찮게 적어가면 코드를 작성했었다.
import java.util.Scanner;
class Main2{
Scanner sc=new Scanner(System.in);
}
import문을 사용하게 되면 Scanner 클래스를 사용할 때 즉 Scanner 객체를 생성할 때 패키지 이름을 import문에서 단 한번만 작성하면 모든 클래스에서 객체를 생성할 수 있게 된다.
여기서 알아야 할 것은
import문은 반드시 모든 코드들을 무시하고 맨 위에 있어야 한다. (단, package 밑)
또 한 java.lang 패키지는 java의 기본 패키지라 import문을 사용하지 않아도 얼마든지 사용할 수 있다. (ex String, System 등)
//import java.util.Objects;
//import java.util.Scanner;
import java.util.*;
class Main2 {
Scanner sc = new Scanner(System.in); //Scanner 클래스 사용
int n=sc.nextInt();
public int hashCode() {
return Objects.hash(n); //Objects 클래스 사용
}
}
그리고 java.util 패키지 안에 있는 클래스들을 Scanner 뿐만 아니라 다른 것도 다양하게 사용하게 된다면 일일이 각 클래스마다 import문으로 작성하지 않고 import java.util.*;으로 작성하면 util 패키지 안에 있는 모든 클래스들을 사용할 수 있게 된다.
다시 정리하면 import문은 반드시 모든 코드를 무시하고 맨 위에 존재해야 한다.
( 패키지문과 클래스 선언의 사이)
import 패키지명. 클래스명;
또는
import 패키지명.*; (클래스명 생략 패키지 내에 모든 클래스 사용 가능) //프로그램 성능에 영향 없다.
static import
static 멤버를 사용할 때 클래스 이름을 생략할 수 있게 해 준다.
public class Main {
public static void main(String[] args) {
double d1= 1.5;
double d2= 1.3;
double outd= d1/d2;
outd=Math.round(outd*1000)/1000.;
int num=1515;
num=(int)Math.round(num/100.0)*100;
System.out.println(outd+" "+num);
}
}
1.154 1500
static import 사용 전 코드
import static java.lang.System.out; //System.out 을 out으로만 참조가능
import static java.lang.Math.round; //Math.round 을 round으로만 참조가능
public class Main {
public static void main(String[] args) {
double d1 = 1.5;
double d2 = 1.3;
double outd = d1 / d2;
outd = round(outd * 1000) / 1000.0;
int num = 1515;
num = (int) round(num / 100.0) * 100;
out.println(outd + " " + num);
}
}
1.154 1500
static import 사용 후 코드
import static으로 System와 Math를 생략한 것을 확인할 수 있다.