JAVA의 정석

(객체part2) 3. 패키지 / import 문과 static import문

499.token.required 2023. 8. 19. 00:40

패키지(package)

 

패키지란 , 클래스의 묶음이다. 패키지에는 클래스와 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으

 

로써 클래스를 효율적으로 관리할 수 있다.

 

같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 

 

클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다. 

 

지금까지는 단순히 클래스 이름만으로 클래스를 구분했지만, 사실 클래스의 실제 이름은 패키지명을 포함한다.

 

예를 들면 String 클래스의 실제 이름은 java.lang.String이다. java.lang패키지에 속한 String 클래스라는 의미이다. 그래서

 

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

 

클래스가 물리적으로 하나의 클래스파일(.class)인 것 과 같이 패키지는 물리적으로 하나의 디렉토리이다. 그래서 어떤 패키지에 속한 클래스는

 

해당 디렉토리에 존재하는 클래스파일 (클래스이름.class)이어야 한다.

 

예를 들어 , java.lang.String 클래스는 물리적으로 디렉토리 java의 서브디렉토리인 lang에 속한 String.class파일이다. 

 

그리고 System 클래스 역시 java.lang 패키지에 속하므로 lang 디렉토리에 포함되어 있다.

 

String 클래스는 rt.jar 파일에 압축되어 있으며, 

 

rt -> java -> lang -> 폴더에 들어가면 String.class를 볼 수 있다.

 

디렉토리가 하위 디렉토리를 가질 수 있는 것처럼, 패키지에서도 다른 패키지를 포함할 수 있으며 점'.'으로 구분한다.

 

예를 들면 java.lang 패키지에 lang 패키지는 java패키지의 하위 패키지이다.

 

패키지를 선언하는 방법은 다음과 같다 . ' pakage 패키지명 ' 을 클래스나 인터페이스의 소스파일 맨 위에 한줄만 적으면 된다.

- 주석과 공백을 제외한 첫 번째 문장이어야 하며 , 딱 한 번만 선언 될 수 있다. 

- 클래스명과 구분하기 위해서 소문자로 하는 것을 원칙으로 한다.

- 모든 클래스는 반드시 하나의 패키지에 포함 되어야 한다.

 

하지만 그럼에도 불구하고 지금까지 선언 없이 된 이유는 이름없는 패키지 덕분이다. 

 

소스파일에 자신이 속한 패키지를 지정하지 않은 클래스는 자동적으로 이름 없는 패키지로 속하게 된다.

 


 

import 

 

소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용하여야 한다.

 

하지만 , 매번 패키지명을 붙여 작성하는 것은 불편하다. 그렇기에 클래스의 코드를 작성하기 전 Import문으로 사용하고자 하는

 

클래스의 패키지를 미리 명시해주면 코드에 사용되는 클래스이름에서 패키지명을 생략할 수 있다.

 

ex) java.utill.Date today = new java.utill.Date(); 

-> imort java.utill.Date; Date today = new Date ;

 

import문의 역할은 컴파일렁게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다.

 

컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아 낸 다음, 모든 클래스이름 앞에 패키지명을 붙여준다.

 

이클립스는 단축기 ctrl+shift+o 를 누르면 자동으로 추가해준다.

 

모든 소스파일(.java)에서 impot문은 package문 다음에 , 그리고 클래스 선언문 이전에 위치해야 하며, package와 달리 여러번 선언이 

 

가능하다.

 

import 패키지명.클래스명 ;       또는      imprt 패키지명.*

 

*을 이용하면 지정된 패키지에 속하는 모든 클래스를 패키지명 없이 사용할 수 있다. 실행 시 성능 차이는 없다.

 

static import 

 

import문을 사용하면 클래스의 패키지명을 생략할 수 있는 것과 같이 static import문을 사용하면

 

static 멤버를 호출할 때 클래스 이름을 생략할 수 있다. 특정 클래스의 static 멤버를 자주 사용할 때 편리하다.

 

 

 

위와 같이 static import문을 선언하여 코드를 간결히 할 수 있다.