Java-패키지
패키지는 이름 충돌을 방지하고 액세스를 제어하며 클래스, 인터페이스, 열거 및 주석의 검색 / 찾기 및 사용을 더 쉽게 만들기 위해 Java에서 사용됩니다.
ㅏ Package 액세스 보호 및 네임 스페이스 관리를 제공하는 관련 유형 (클래스, 인터페이스, 열거 및 주석)의 그룹으로 정의 할 수 있습니다.
Java의 기존 패키지 중 일부는 다음과 같습니다.
java.lang − 기본 클래스 번들
java.io − 입력, 출력 함수에 대한 클래스가이 패키지에 번들로 제공됩니다.
프로그래머는 자신의 패키지를 정의하여 클래스 / 인터페이스 그룹 등을 묶을 수 있습니다. 프로그래머가 클래스, 인터페이스, 열거 형 및 주석이 관련되어 있는지 쉽게 확인할 수 있도록 사용자가 구현 한 관련 클래스를 그룹화하는 것이 좋습니다.
패키지가 새 네임 스페이스를 생성하므로 다른 패키지의 이름과 충돌하는 이름이 없습니다. 패키지를 사용하면 액세스 제어를 더 쉽게 제공하고 관련 클래스를 더 쉽게 찾을 수 있습니다.
패키지 생성
패키지를 생성하는 동안 패키지 이름을 선택하고 package 패키지에 포함 할 클래스, 인터페이스, 열거 형 및 주석 유형을 포함하는 모든 소스 파일의 맨 위에있는 해당 이름과 함께 명령문을 포함합니다.
패키지 명령문은 소스 파일의 첫 번째 행이어야합니다. 각 소스 파일에는 하나의 패키지 문만있을 수 있으며 파일의 모든 유형에 적용됩니다.
패키지 문이 사용되지 않으면 클래스, 인터페이스, 열거 및 주석 유형이 현재 기본 패키지에 배치됩니다.
package 문으로 Java 프로그램을 컴파일하려면 아래와 같이 -d 옵션을 사용해야합니다.
javac -d Destination_folder file_name.java
그러면 지정된 패키지 이름의 폴더가 지정된 대상에 생성되고 컴파일 된 클래스 파일이 해당 폴더에 배치됩니다.
예
다음과 같은 패키지를 생성하는 예를 살펴 보겠습니다. animals. 클래스 및 인터페이스 이름과 충돌하지 않도록 소문자로 된 패키지 이름을 사용하는 것이 좋습니다.
다음 패키지 예는 인터페이스 이름이 포함 동물 -
/* File name : Animal.java */
package animals;
interface Animal {
public void eat();
public void travel();
}
이제, 우리는 동일한 패키지에 위의 인터페이스를 구현하자 동물 -
package animals;
/* File name : MammalInt.java */
public class MammalInt implements Animal {
public void eat() {
System.out.println("Mammal eats");
}
public void travel() {
System.out.println("Mammal travels");
}
public int noOfLegs() {
return 0;
}
public static void main(String args[]) {
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}
이제 아래와 같이 자바 파일을 컴파일하십시오.
$ javac -d . Animal.java
$ javac -d . MammalInt.java
이제 이름이있는 패키지 / 폴더 animals 현재 디렉토리에 생성되며 이러한 클래스 파일은 아래와 같이 배치됩니다.
패키지 내에서 클래스 파일을 실행하면 아래와 같은 결과를 얻을 수 있습니다.
Mammal eats
Mammal travels
수입 키워드
클래스가 동일한 패키지에있는 다른 클래스를 사용하려는 경우 패키지 이름을 사용할 필요가 없습니다. 동일한 패키지의 클래스는 특별한 구문없이 서로를 찾습니다.
예
여기에서 Boss라는 클래스가 이미 Employee가 포함 된 급여 패키지에 추가됩니다. 그런 다음 Boss는 다음 Boss 클래스에서 보여주는 것처럼 급여 접두사를 사용하지 않고 Employee 클래스를 참조 할 수 있습니다.
package payroll;
public class Boss {
public void payEmployee(Employee e) {
e.mailCheck();
}
}
Employee 클래스가 급여 패키지에 없으면 어떻게됩니까? 그런 다음 Boss 클래스는 다른 패키지의 클래스를 참조하기 위해 다음 기술 중 하나를 사용해야합니다.
- 클래스의 완전한 이름을 사용할 수 있습니다. 예를 들면-
payroll.Employee
import 키워드와 와일드 카드 (*)를 사용하여 패키지를 가져올 수 있습니다. 예를 들면-
import payroll.*;
- import 키워드를 사용하여 클래스 자체를 가져올 수 있습니다. 예를 들면-
import payroll.Employee;
Note− 클래스 파일은 여러 개의 import 문을 포함 할 수 있습니다. import 문은 패키지 문 뒤와 클래스 선언 앞에 나타나야합니다.
패키지의 디렉토리 구조
클래스가 패키지에 배치되면 두 가지 주요 결과가 발생합니다.
패키지 이름은 이전 섹션에서 방금 설명한 것처럼 클래스 이름의 일부가됩니다.
패키지 이름은 해당 바이트 코드가있는 디렉토리 구조와 일치해야합니다.
다음은 Java로 파일을 관리하는 간단한 방법입니다.
클래스, 인터페이스, 열거 또는 주석 유형에 대한 소스 코드를 이름이 유형의 단순 이름이고 확장자가 인 텍스트 파일에 넣으십시오. .java.
예를 들면-
// File Name : Car.java
package vehicle;
public class Car {
// Class implementation.
}
이제 클래스가 속한 패키지의 이름을 반영하는 이름을 가진 디렉토리에 소스 파일을 넣으십시오.
....\vehicle\Car.java
이제 정규화 된 클래스 이름과 경로 이름은 다음과 같습니다.
- 클래스 명 → vehicle.Car
- 경로 이름 → vehicle \ Car.java (Windows)
일반적으로 회사는 패키지 이름에 역방향 인터넷 도메인 이름을 사용합니다.
Example− 회사의 인터넷 도메인 이름은 apple.com이고 모든 패키지 이름은 com.apple로 시작합니다. 패키지 이름의 각 구성 요소는 하위 디렉터리에 해당합니다.
Example − 회사에는 Dell.java 소스 파일이 포함 된 com.apple.computers 패키지가 있었으며 다음과 같은 일련의 하위 디렉토리에 포함됩니다.
....\com\apple\computers\Dell.java
컴파일시 컴파일러는 정의 된 각 클래스, 인터페이스 및 열거에 대해 다른 출력 파일을 만듭니다. 출력 파일의 기본 이름은 유형의 이름이고 확장자는.class.
예를 들면-
// File Name: Dell.java
package com.apple.computers;
public class Dell {
}
class Ups {
}
이제 -d 옵션을 사용하여 다음과 같이이 파일을 컴파일하십시오.
$javac -d . Dell.java
파일은 다음과 같이 컴파일됩니다.
.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class
다음과 같이 \ com \ apple \ computers \에 정의 된 모든 클래스 또는 인터페이스를 가져올 수 있습니다.
import com.apple.computers.*;
.java 소스 파일과 마찬가지로 컴파일 된 .class 파일은 패키지 이름을 반영하는 일련의 디렉토리에 있어야합니다. 그러나 .class 파일에 대한 경로는 .java 소스 파일에 대한 경로와 동일하지 않아도됩니다. 다음과 같이 소스 및 클래스 디렉토리를 별도로 정렬 할 수 있습니다.
<path-one>\sources\com\apple\computers\Dell.java
<path-two>\classes\com\apple\computers\Dell.class
이렇게하면 소스를 공개하지 않고 다른 프로그래머에게 classes 디렉토리에 대한 액세스 권한을 부여 할 수 있습니다. 또한 컴파일러와 JVM (Java Virtual Machine)이 프로그램에서 사용하는 모든 유형을 찾을 수 있도록 이러한 방식으로 소스 및 클래스 파일을 관리해야합니다.
클래스 디렉토리에 대한 전체 경로 인 <path-two> \ classes는 클래스 경로라고하며 CLASSPATH 시스템 변수로 설정됩니다. 컴파일러와 JVM 모두 패키지 이름을 클래스 경로에 추가하여 .class 파일에 대한 경로를 구성합니다.
<path-two> \ classes가 클래스 경로이고 패키지 이름이 com.apple.computers라고 말하면 컴파일러와 JVM은 <path-two> \ classes \ com \ apple \ computers에서 .class 파일을 찾습니다.
클래스 경로에는 여러 경로가 포함될 수 있습니다. 여러 경로는 세미콜론 (Windows) 또는 콜론 (Unix)으로 구분해야합니다. 기본적으로 컴파일러와 JVM은 현재 디렉토리와 Java 플랫폼 클래스가 포함 된 JAR 파일을 검색하여 이러한 디렉토리가 자동으로 클래스 경로에 있도록합니다.
CLASSPATH 시스템 변수 설정
현재 CLASSPATH 변수를 표시하려면 Windows 및 UNIX (Bourne 쉘)에서 다음 명령을 사용하십시오.
- Windows에서 → C : \> CLASSPATH 설정
- UNIX에서 → % echo $ CLASSPATH
CLASSPATH 변수의 현재 내용을 삭제하려면 −
- Windows에서 → C : \> set CLASSPATH =
- UNIX에서 → % unset CLASSPATH; CLASSPATH 내보내기
CLASSPATH 변수를 설정하려면-
- Windows에서 → CLASSPATH = C : \ users \ jack \ java \ classes 설정
- UNIX에서 → % CLASSPATH = / home / jack / java / classes; CLASSPATH 내보내기