이 빠른 자습서에서는 Java 패키지의 기본 사항을 다룹니다.
패키지를 만들고 그 안에 배치한 유형에 액세스하는 방법을 살펴보겠습니다.
우리는 또한 명명 규칙과 그것이 기본 디렉토리 구조와 어떻게 관련되는지 논의할 것입니다.
마지막으로 패키지된 Java 클래스를 컴파일하고 실행할 것입니다.
Java에서는 패키지를 사용하여 관련 클래스, 인터페이스 및 하위 패키지를 그룹화합니다.
이 작업의 주요 이점은 다음과 같습니다.
다음으로 Java 패키지를 만들고 사용하는 방법을 살펴보겠습니다.
패키지를 생성하려면 파일의 첫 번째 코드 줄에 패키지 문을 추가 하여 패키지문을 사용해야 합니다 .
com.baeldung.packages 라는 이름의 패키지에 유형을 배치해 보겠습니다 .
package com.baeldung.packages;
각각의 새로운 유형을 패키지에 넣는 것이 좋습니다. 유형을 정의하고 패키지에 넣지 않으면 기본 또는 이름 없는 패키지로 이동합니다.
기본 패키지를 사용하면 몇 가지 단점이 있습니다.
따라서 실제 응용 프로그램에서 이름이 지정되지 않거나 기본 패키지를 사용하지 않아야 합니다.
같은 이름의 패키지를 피하기 위해 몇 가지 명명 규칙을 따릅니다.
조직을 기반으로 패키지 이름을 결정하기 위해 일반적으로 회사 URL을 반대로 하여 시작합니다.
그 후 명명 규칙은 회사에서 정의하며 부서 이름과 프로젝트 이름을 포함할 수 있습니다.
예를 들어, www.baeldung.com 에서 패키지를 만들려면 그것을 반대로 합시다:
com.baeldung
그런 다음 com.baeldung.packages 또는 com.baeldung.packages.domain과 같은 하위 패키지를 추가로 정의할 수 있습니다.
Java의 패키지는 디렉토리 구조에 해당합니다.
각 패키지와 하위 패키지에는 고유한 디렉토리가 있습니다.
따라서 com.baeldung.packages 패키지의 경우 com -> baeldung -> packages 의 디렉토리 구조를 가져야 합니다.
대부분의 IDE는 패키지 이름을 기반으로 이 디렉토리 구조를 만드는 데 도움이 되므로 직접 만들 필요가 없습니다.
domain 이라는 서브패키지에 TodoItem 클래스를 정의하는 것부터 시작합시다.
package com.baeldung.packages.domain;
public class TodoItem {
private Long id;
private String description;
// standard getters and setters
}
다른 패키지의 클래스에서 TodoItem 클래스를 사용 하려면 가져와야 합니다. 가져온 후에는 이름으로 액세스할 수 있습니다.
패키지에서 단일 유형을 가져오거나 별표를 사용하여 패키지의 모든 유형을 가져올 수 있습니다.
전체 도메인 하위 패키지를 가져오겠습니다.
import com.baeldung.packages.domain.*;
이제 TodoItem 클래스만 가져오겠습니다.
import com.baeldung.packages.domain.TodoItem;
JDK 및 기타 Java 라이브러리도 자체 패키지와 함께 제공됩니다. 같은 방식으로 프로젝트에서 사용하려는 기존 클래스를 가져올 수 있습니다.
예를 들어 Java 핵심 List 인터페이스와 ArrayList 클래스를 가져오겠습니다.
import java.util.ArrayList;
import java.util.List;
그런 다음 단순히 이름을 사용하여 애플리케이션에서 이러한 유형을 사용할 수 있습니다.
public class TodoList {
private List<TodoItem> todoItems;
public void addTodoItem(TodoItem todoItem) {
if (todoItems == null) {
todoItems = new ArrayList<TodoItem>();
}
todoItems.add(todoItem);
}
}
여기에서 우리는 새로운 클래스를 자바 코어 클래스와 함께 사용하여 ToDoItem 목록 을 생성했습니다.
때로는 다른 패키지에서 같은 이름을 가진 두 개의 클래스를 사용할 수 있습니다.
예를 들어, 우리는 java.sql.Date 와 java.util.Date 를 모두 사용할 수 있습니다.
이름 충돌이 발생하면 클래스 중 하나 이상에 대해 완전한 클래스 이름을 사용해야 합니다.
완전한 이름으로 TodoItem 을 사용합시다 :
public class TodoList {
private List<com.baeldung.packages.domain.TodoItem> todoItems;
public void addTodoItem(com.baeldung.packages.domain.TodoItem todoItem) {
if (todoItems == null) {
todoItems = new ArrayList<com.baeldung.packages.domain.TodoItem>();
}todoItems.add(todoItem);
}
// standard getters and setters
}
패키지된 클래스를 컴파일할 때 디렉터리 구조를 기억해야 합니다. 소스 폴더에서 시작하여 javac 에 파일을 찾을 위치를 알려야 합니다.
TodoList 클래스가 의존 하기 때문에 먼저 TodoItem 클래스를 컴파일해야 합니다.
명령줄이나 터미널을 열고 소스 디렉토리로 이동하여 시작하겠습니다.
이제 com.baeldung.packages.domain.TodoItem 클래스를 컴파일해 보겠습니다.
javac com/baeldung/packages/domain/TodoItem.java
클래스가 깔끔하게 컴파일되면 오류 메시지가 표시되지 않고 TodoItem.class 파일 이 com/baeldung/packages/domain 디렉토리 에 나타나야 합니다.
다른 패키지의 유형을 참조하는 유형의 경우 -classpath 플래그를 사용 하여 다른 컴파일된 클래스를 찾을 위치를 javac 명령에 알려야 합니다.
이제 TodoItem 클래스가 컴파일 되었으므로 TodoList 및 TodoApp 클래스를 컴파일할 수 있습니다.
javac -classpath . com/baeldung/packages/*.java
다시 말하지만, 오류 메시지가 표시되지 않아야 하며 com/baeldung/packages 디렉토리에서 두 개의 클래스 파일을 찾아야 합니다.
TodoApp 클래스 의 정규화된 이름을 사용하여 애플리케이션을 실행해 보겠습니다 .
java com.baeldung.packages.TodoApp
출력은 다음과 같아야 합니다