코드일기장

[Java] 패키지, import, static import 본문

Java/OOP

[Java] 패키지, import, static import

won_hyeok2 2022. 2. 5. 23:09

 

 

 

패키지

 

- 서로 관련된 클래스의 묶음

- 클래스는 클래스 파일(*. 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를 생략한 것을 확인할 수 있다.

Comments