패키지 만들기
패키지 선언
자바 소스 파일(.java)이 컴파일되어 생기는 클래스 파일(.class 파일)은 반드시 패키지에 소속되어야 합니다. 클래스가 소속될 패키지 명은 다음과 같이 package 키워드를 이용하여 소스 파일이 첫 줄에 선언합니다.
package 패키지명;
package UI; // Tools 클래스를 컴파일하여 UI 패키지에 저장할 것을 지시
public class Tools { // 이제 이 클래스의 경로명은 UI.Tools가 된다.
........
}
Tools.java 파일이 컴파일된 Tools.class 파일은 UI 디렉터리에 저장되며, Tools 클래스(Tools.class 파일)의 경로명은 다음과 같습니다.
UI.Tools
그러므로 다른 패키지에 있는 클래스에서 Tools 클래스를 사용하고자 하면, 다음 import문이 필요합니다.
import UI.Tools;
예를 들어, Tools 클래스를 사용하는 Line 클래스는 다음과 같이 작성합니다.
package Graphic; // Line 클래스를 Graphic 패키지에 저장
import UI.Tools; // Tools 클래스의 경로명 알림
public class Line() {
public void draw() {
Tools t = new Tools();
}
}
이클레스로 쉽게 패키지 만들기
예제 프로젝트 만들기

lib와 app 패키지 만들기
File/New/Package 메뉴를 선택하여 lib와 app 패키지를 각각 만듭니다.



Calculator.java와 GoodCalc.java 작성
File/New/Class 메뉴를 선택하고 패키지를 선택하기 위해 Package: 항목의 Browse 버튼을 선택하고 lib을 선택합니다. 그러고 나서 Calculator를 입력합니다.

자동으로 Calulator.java 파일이 생성되고, Calculator 클래스에는 다음과 같이 package lib; 문이 자동으로 추가되었습니다.
package lib;
public abstract class Calculator {
}
다른 패키지에서 Calculator 클래스를 접근할 수 있도록, Calculator의 접근 지정자를 public으로 선언하는 점입니다.

app 패키지 밑에 GoodCalc.java를 작성합니다. 이때 소스의 서두에 다음 import 문장을 넣어야 함을 잊어서는 안됩니다.

import lib.Calculator;
import 문장은 다른 패키지에 있는 클래스를 사용하고자 할 때, 컴파일러에게 패키지명을 포함하는 클래스명을 알려주는 문장입니다.
예제 응용 프로그램 실행
Run Configurations 메뉴를 실행하고 Main class에 app.GoodCalc를 입력하고 Run 버튼을 누릅니다.


디폴트 패키지(default package)
package 선언문을 사용하지 않고 자바 클래스나 인터페이스에 작성하면, 자바 컴파일러는 클래스나 인터페이스를 디폴트 패키지(default package)에 소속시킵니다. 디폴트 패키지는 현재 디렉터리입니다.
패키지의 특징
패키지 계층 구조
상속 관계에 있는 클래스나 인터페이스의 경우, 서브 클래스 파일을 슈퍼 클래스 파일이 저장된 패키지의 서브 디렉터리에 패키지를 만들어 저장하여 계층화시키면 더욱 관리하기 쉽습니다.
패키지별 접근 제한
패키지에 포함된 클래스들끼리는 자유롭게 접근하게 하고, 다른 패키지의 클래스들을 접근을 막음으로써 패키지를 접근 권한의 범위로도 이용할 수 있습니다.
동일한 이름의 클래스를 다른 패키지에 작성 가능
같은 패키지 내에서는 동일한 이름을 가진 클래스나 안터페이스가 존재할 수 없습니다. 그러나 다른 패키지애서는 가능합니다. 클래스 이름은 패키지명을 포함한 전체 경로명을 사용하기 떄문입니다. 이것은 파일 시스템에 같은 이름을 가진 파일이 다른 디렉토리에 있으면 서로 다른 파일로 인지하는 것과 같습니다.
소프트웨어의 높은 재사용성
클래스와 인터페이스를 잘 분류하여 패키지로 관리하면, 나중에 같거나 유사한 기능을 수행하는 클래스나 인터페이스는 재작성할 필요 없이 프로그램에 포함하여 쉽게 사용할 수 있습니다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| 화면 설계 (1) | 2025.02.28 |
|---|---|
| 모듈 개념 (0) | 2025.02.28 |
| import와 클래스 경로 (0) | 2025.02.22 |
| Java Programming 3 (1) | 2025.02.19 |
| 패키지(Package) (0) | 2025.02.19 |