본문 바로가기
멀티캠퍼스 풀스택 과정/Java의 정석

자바의 정석3-3 패키지와 import문

by 이쟝 2022. 1. 1.

패키지(package)

- 서로 관련된 클래스의 묶음. 이름이 같은 클래스라도 서로 다른 패키지에 속하면 패키지명으로 구별이 가능하다. 

- 클래스의 실제 이름(full name 예) String)은 패키지를 포함(java.lang.String)

-> Java 패키지(폴더) 안에 -> lang 패키지(하위 폴더) 안에 -> String 클래스 파일

 

패키지의 선언

- 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언(파일 맨 위에)

- 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다.

- 대소문자를 모두 허용하지만, 클래스명과 쉽게 구분하기 위해 소문자로!

- 이름없는 패키지(unnamed): 패키지 선언이 없는 클래스들이 속하게 되는 패키지 (이클립스에선 default package)

 

클래스 패스(classpath)

- 클래스 파일(*.class)의 위치를 알려주는 경로(path)

- 환경변수(OS에서 관리) classpath로 관리하며, 경로간의 구분자는 ‘;’를 사용

- classpath(환경변수)에 패키지의 루트를 등록해줘야 함

누가: JVM이 언제: 프로그램을 실행 할 때 왜: 클래스파일을 찾기 위해
무엇을: 클래스패스(기존파일경로)를  어떻게: 사용한다  

 


import

- 클래스를 사용할 때 패키지 이름을 생략할 수 있음

- 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것

- 컴파일 시 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아낸 다음 모든 클래스 이름 앞에 패키지 명을 붙여줌(이클립스 자동 단축키 ctrl + shift + O)

 

class ImportTest {
	java.util.Date today = new java.util.Date(); //원래 기존에 해야하는 방식
}

import java.util.Date;
class ImportTest {
	Date today = new Date();  //패키지 이름 생략 가능!
}

<원래 기본 형식>
public static void main(java.lang.String[] args) {
	java.lang.System.out.println("Hello");
}
-> java.lang패키지의 클래스는 import하지 않고도 사용할 수 있다.(String, Objcet, System, Thread…)

 

import문의 선언

 

- import문을 선언하는 방법: import 패키지명.클래스명; 또는 import 패키지명.*;  (이클립스 자동 단축키 ctrl+shift+O)

- import문은 패키지문과 클래스선언 사이에 선언한다.

- impot문은 컴파일 시에 처리되므로 프로그램의 성능에 영향 없음

 

-> 오른쪽 코드의 의미: java.util패키지의 모든 클래스

 

-> 오른쪽 코드의 의미: java 패키지의 모든 클래스(패키지는 불포함)

 

클래스 이름이 Date로 같다!

- 클래스 이름은 같고 패키지가 다른 경우 import할 때는 클래스 앞에 패키지 명을 붙여줘야 한다.

 


 

static import문: static멤버를 호출할 때 클래스 이름을 생략할 수 있게 해준다.

 

import static java.lang.Integer.*;       // Integer클래스의 모든 static메서드(static멤버

import static java.lang.Math.random;  // Math.random( ). 괄호 안붙임

import static java.lang.System.out;    // System.outout만으로 참조 가능

 

System.out.println(Math.random( ))  -> out.println(random( ));으로 가능!(SystemMath 생략)


예제

import static java.lang.System.out; 
import static java.lang.Math.*;     // Math클래스의 모든 static 멤버를 클래스 이름 생략해서 사용 가능

class Ex {
	public static void main(String[] args) {
//		System.out.println(Math.random());
		out.println(random());
		
//		System.out.println("Math.PI: " + Math.PI);
		out.println("Math.PI: " + PI);
	}
}