프로그래밍 언어/Java

Java(package(패키지))

benjykim 2018. 3. 15. 21:37
반응형

*이 포스트는 남궁성님의 '자바의 정석'책을 참고하여 작성했습니다.


* Package(패키지)


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


같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로. 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다.


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


예를 들면, String 클래스의 패키지명을 포함한 이름은 java.lang.String이다. 즉, java.lang 패키지에 속한 String클래스라는 의미이다. 그래서 같은 이름의 클래스일 지라도 서로 다른 패키지에 속하면 패키지명으로 구별이 가능하다.


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

그래서 어떤 패키지에 속한 클래스는 해당 디렉토리에 존재하는 클래스 파일(.class)이어야 한다.


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


[참고] 클래스 파일들을 압축한 것이 jar파일(*.jar)이다.


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



 - 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.


 - 모든 클래스는 반드시 하나의 패키지에 속해야 한다.


 - 패키지는 점(.)을 구분자로 하여 계층구조를 구성할 수 있다.


 - 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.



* Package의 선언


 - 패키지 선언하는 방법 > package 패키지명;


: 위와 같은 패키지 선언문은 반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야 하며, 하나의 소스파일에 단 한번만 선언될 수 있다. 해당 소스파일에 포함된 모든 클래스나 인터페이스는 선언된 패키지에 속하게 된다. (패키지명은 클래스명과 쉽게 구분하기 위해서 소문자로 하는 것은 원칙으로 한다.)


지금까지 소스파일을 작성할 때 패키지를 선언하지 않고도 아무런 문제가 없었다. 왜냐하면 자바에서 기본적으로 제공하는 '이름없는 패키지' 때문이다.


소스파일에 자신이 속할 패키지를 지정하지 않은 클래스는 자동적으로 '이름 없는 패키지''에 속하게 된다. 결국 패키지를 지정하지 않는 모든 클래스들은 같은 패키지에 속하는 셈이다.













반응형