Java의 패키지는 클래스 하위 패키지 및 인터페이스 그룹을 캡슐화하는 메커니즘입니다. 패키지는 다음 용도로 사용됩니다.
- 동일한 이름을 가진 클래스가 College.staff.cse.Employee 및 College.staff.ee.Employee와 같은 다른 패키지에 존재하도록 허용하여 이름 충돌을 방지합니다.
 - 클래스 인터페이스와 기타 구성요소를 찾아 사용하기 쉽게 구성하세요.
 - 동일한 패키지 내에서 서브클래스별로 액세스할 수 있는 Protected 멤버에 대해 제어된 액세스를 제공합니다. 기본 멤버(액세스 지정자 없음)는 동일한 패키지 내에서만 액세스할 수 있습니다.
 
관련 클래스를 패키지로 그룹화함으로써 Java는 데이터 캡슐화를 촉진하여 코드를 재사용하고 관리하기 쉽게 만듭니다. 프로그램에서 사용하려면 패키지에서 원하는 클래스를 가져오기만 하면 됩니다.
사용자 정의 패키지 만들기
1단계: 패키지와 Java 파일을 생성할 디렉터리를 만듭니다.
mkdir 프로그래밍
Java에 있는 동안 수행
2단계: 이제 디렉토리를 변경하고 기본 폴더 안에 다른 폴더를 만듭니다.
CD 프로그래밍
mkdir Java프로그래밍
CD Java프로그래밍
mkdir 배열
3단계: 이제 빈 텍스트 파일을 생성하고 아래 Java 코드를 작성하고 확장자가 .java인 클래스(TwoPointers.java)와 동일한 이름으로 저장하는 것을 잊지 마세요.
TwoPointers 클래스.
Java
package JavaProgramming.arrays; // Main class present inside the package  public class TwoPointers {  public static void main(String[] args) {  System.out.println('Inside the package');  } } 
   
    메모:   프로그램 파일 내에 패키지 이름을 추가하는 것을 잊지 마십시오.
4단계: 이제 정의 폴더 경로로 프로그램을 실행하십시오.
javac srcJavaProgrammingarraysTwoPointers.java
자바 srcJavaProgrammingarraysTwoPointers.java
산출:
폴더 경로로 프로그램 실행 중폴더 구조:
이는 아래 이미지에서 Java의 사용자 정의 패키지를 시각적으로 표현한 것입니다. 먼저 Progamming이라는 폴더를 만들고 그 안에 Javaprogramming 패키지를 만든 다음 배열 . 그런 다음 아래 이미지에 표시된 Java 클래스 파일을 그 안에 만듭니다.
폴더 구조Java 패키지 작업
디렉토리 구조: 패키지 이름과 디렉터리 구조는 밀접하게 관련되어 있습니다. 예를 들어, 패키지 이름이 College.staff.cse인 경우 세 개의 디렉터리는 대학 직원과 cse입니다. 여기서 cse는 직원 내부에 있고 직원은 대학 내부에 있습니다.
명명 규칙 : 패키지 이름은 도메인 이름의 역순으로 작성됩니다. org.geeksforgeeks.practice. 대학에서는 다음과 같은 규칙을 따릅니다.
- 대학.기술.cse
 - 대학.기술.ee
 - 대학.예술.역사
 
예:
import java.util.*;
여기서 util은 Java 패키지 내부에 생성된 하위 패키지입니다.
패키지 내의 클래스에 액세스
Java에서는 다음 방법 중 하나를 사용하여 패키지에서 클래스를 가져올 수 있습니다.
1. 특정 클래스 가져오기 :
java.util.Vector 가져오기;
이는 java.util 패키지에서 Vector 클래스만 가져옵니다.
2. 패키지에서 모든 클래스 가져오기 :
import java.util.*;
java.util 패키지에서 모든 클래스와 인터페이스를 가져오지만 하위 패키지는 포함하지 않습니다.
예: Vector 클래스 가져오기
Javaimport java.util.Vector; public class Geeks {    public Geeks() {    // java.util.Vector is imported We are able to access it directly in our code.  Vector v = new Vector();    java.util.ArrayList l = new java.util.ArrayList();  l.add(3);  l.add(5);  l.add(7);    System.out.println(l);  }  public static void main(String[] args) {      new Geeks();  } } 
   산출
[3 5 7]
메모:
- 가져오기 패키지 사용.*; 패키지의 모든 클래스를 가져오지만 하위 패키지의 클래스는 가져오지 않습니다.
 - 두 패키지에 동일한 이름의 클래스가 있는 경우(예: java.util.Date 및 my.package.Date) 충돌을 방지하려면 정규화된 이름을 사용하세요.
 
java.util.Date 가져오기;
리눅스에서 파일 편집하기my.package.Date 가져오기;
Java 패키지 유형
- 내장 패키지
 - 사용자 정의 패키지
 
1. 내장 패키지
이 패키지는 Java의 일부인 많은 수의 클래스로 구성됩니다. API .일반적으로 사용되는 내장 패키지 중 일부는 다음과 같습니다.
- java.lang : 언어 지원 클래스(예: 기본 데이터 유형 수학 연산을 정의하는 클래스)를 포함합니다. 이 패키지는 자동으로 가져옵니다.
 - java.io: 입력/출력 작업을 지원하기 위한 클래스가 포함되어 있습니다.
 - java.util : Linked List Dictionary와 같은 데이터 구조를 구현하고 지원하는 유틸리티 클래스를 포함합니다. 날짜/시간 작업용.
 - 자바.애플릿: 애플릿을 생성하기 위한 클래스가 포함되어 있습니다.
 - java.aut: 그래픽 사용자 인터페이스(예: 버튼, 메뉴 등)용 구성 요소를 구현하기 위한 클래스를 포함합니다. 6)
 - 자바.넷: 네트워킹 작업을 지원하기 위한 클래스를 포함합니다.
 
2. 사용자 정의 패키지
이는 사용자가 정의한 패키지입니다.
1. 패키지 생성:
먼저 myPackage 디렉터리를 만듭니다(이름은 패키지 이름과 동일해야 합니다). 그런 다음 첫 번째 문이 패키지 이름인 디렉터리 내에 MyClass를 만듭니다.
예:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. 프로그램에서 수업을 사용하세요:   
이제 우리는 마이클래스 우리 프로그램의 수업.
Java import myPackage.MyClass; public class Geeks {  public static void main(String args[]) {     // Initializing the String variable with a value   String s = 'GeeksforGeeks';    // Creating an instance of class MyClass in the package.  MyClass o = new MyClass();    o.getNames(s);  } } 
   
    메모:   MyClass.java는 패키지의 일부이므로 myPackage 디렉터리 내에 저장해야 합니다.  
Java의 정적 가져오기
Java의 정적 가져오기는 정적 멤버에 대한 액세스를 단순화하고 이를 사용자 정의 패키지에 대한 광범위한 논의와 분리합니다.
정적 가져오기 클래스에 정의된 멤버(필드 및 메소드)를 공개로 허용하는 Java 프로그래밍 언어(버전 5 이상)에 도입된 기능입니다. 공전 필드가 정의된 클래스를 지정하지 않고 Java 코드에서 사용됩니다.
예:
Javaimport static java.lang.System.*; class Geeks {  public static void main(String args[]) {    // We don't need to use 'System.out' as imported using static.  out.println('GeeksforGeeks');  } } 
   산출
GeeksforGeeks
이름 충돌 처리
두 패키지에 동일한 이름의 클래스(예: java.util.Date 및 java.sql.Date)가 포함된 경우 충돌을 피하기 위해 전체 패키지 이름을 지정하십시오.
import java.util.*;
import java.sql.*;
//그리고 Date 클래스를 사용하면 컴파일 타임 오류가 발생합니다.
오늘 날짜 ; //오류-- java.util.Date 또는 java.sql.Date?
컴파일러는 우리가 원하는 Date 클래스를 파악할 수 없습니다. 이 문제는 특정 import 문을 사용하여 해결할 수 있습니다.
크기 글꼴 라텍스
java.util.Date 가져오기;
import java.sql.*;
두 Date 클래스가 모두 필요한 경우 해당 클래스의 새 개체를 선언할 때마다 전체 패키지 이름을 사용해야 합니다. 예를 들어:
java.util.Date deadLine = 새로운 java.util.Date();
java.sql.Date 오늘 = 새로운 java.sql.Date();자바의 기본 데이터 유형
디렉토리 구조 및 CLASSPATH
패키지 이름은 디렉터리 구조에 해당합니다. 예를 들어 com.zzz.project1.subproject2 패키지의 Circle 클래스는 다음과 같이 저장됩니다.
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- 여기 $BASE_DIR 패키지의 기본 디렉터리를 나타냅니다.
 - 패키지 이름의 '점'은 파일 시스템의 하위 디렉터리에 해당합니다.
 - 기본 디렉터리( $BASE_DIR )는 파일 시스템의 어느 곳에나 위치할 수 있습니다.
 - 따라서 클래스를 찾으려면 Java 컴파일러와 런타임에 $BASE_DIR의 위치를 알려야 합니다.
 - 이는 환경 변수라는 환경 변수에 의해 수행됩니다. 클래스 패스 .
 - CLASSPATH는 명령 셸에서 실행 가능한 프로그램을 검색하는 데 사용되는 다른 환경 변수 PATH와 유사합니다.
 
CLASSPATH 설정
CLASSPATH는 다음 방법 중 하나로 설정할 수 있습니다.
- CLASSPATH는 Windows의 단계에 따라 환경에서 영구적으로 설정할 수 있습니다.
 
제어판 -> 시스템 -> 고급 -> 환경 변수로 이동합니다.
- 시스템의 모든 사용자에 대해 CLASSPATH를 적용하려면 '시스템 변수'를 선택하십시오.
 - 현재 로그인된 사용자에게만 적용하려면 '사용자 변수'를 선택하세요.
 - CLASSPATH 편집 또는 생성: CLASSPATH가 이미 존재하는 경우 이를 선택하고 '편집'을 클릭하거나 존재하지 않는 경우 '새로 만들기'를 클릭합니다.
 - CLASSPATH 세부 정보 입력: '변수 이름' 필드에 'CLASSPATH'를 입력합니다. '변수 값' 필드에 디렉터리와 JAR 파일을 세미콜론으로 구분하여 입력합니다.
 - '변수 값' 필드에 디렉터리와 JAR 파일을 세미콜론으로 구분하여 입력합니다. 예:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- 점 (
.)는 현재 작업 디렉토리를 나타냅니다. - CLASSPATH의 현재 설정을 확인하려면 다음 명령을 실행하십시오.
 
> 클래스 경로 설정
다음 명령을 실행하여 특정 CMD 쉘 세션에 대해 CLASSPATH를 임시로 설정할 수 있습니다.
> SET CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
CLASSPATH 환경 변수를 사용하는 대신 명령줄 옵션 -classpath 또는 javac 및 java 명령의 -cp를 사용할 수도 있습니다.
> java –classpath c:javaprojectclasses com.abc.project1.subproject2.MyClass3
사용자 정의 패키지 예시: 첫 번째 패키지 만들기: 파일 이름 – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 두 번째 패키지 만들기: 파일 이름 – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 생성된 두 패키지 모두 사용: 파일 이름 – Testing.java
Javaimport package_name.ClassOne; import package_one.ClassTwo; public class Testing {  public static void main(String[] args)  {  ClassTwo a = new ClassTwo();  ClassOne b = new ClassOne();  a.methodClassTwo();  b.methodClassOne();  } } 
 이제 패키지와 테스트 클래스 파일의 디렉터리 구조를 살펴보겠습니다.
  
패키지 컨텍스트의 액세스 수정자
-     공공의:   회원은
public수정자는 액세스하는 클래스가 동일한 패키지에 있는지 여부에 관계없이 어디에서나 액세스할 수 있습니다. . - 보호됨: protected 한정자가 있는 멤버는 동일한 패키지 내에서 액세스할 수 있습니다.
 - 기본: 수식어가 없는 멤버는 동일한 패키지 내에서만 접근 가능
 -     사적인:   회원은
private수정자는 동일한 클래스 내에서만 액세스할 수 있습니다. 동일한 패키지 하위 클래스 또는 다른 패키지의 클래스에서는 액세스할 수 없습니다.