패키지란?
자바에서 패키지는 관련된 클래스 및 인터페이스를 그룹화하고 구조화하기 위한 방법입니다. 패키지는 관련 있는 코드를 논리적으로 묶어서 유지보수와 코드 이해를 쉽게 만듭니다. 간단히 말해, 패키지는 비슷한 기능이나 목적을 가진 클래스들을 모아놓은 디렉토리입니다.
패키지 사용법
자바에서 패키지를 사용하는 방법은 다음과 같습니다.
패키지명 규칙
- 패키지명은 소문자로 시작하고, 소문자와 숫자, 밑줄(
_
)만 포함할 수 있습니다. - 보통 도메인을 역순으로 사용하여 패키지명을 정하며, 특수문자는 사용하지 않습니다.
- 예를 들어, “com.example”와 같은 형식이 일반적입니다.
패키지 선언
- 클래스 파일 상단에 패키지를 선언합니다.
- 패키지 선언은 소스 파일의 첫 부분에 위치해야 합니다.
- 예를 들어, “com.example” 패키지에 속한 클래스를 선언하려면 다음과 같이 작성합니다.
package com.example;
public class MyClass {
// 클래스 내용
}
Java디렉토리 구조
- 패키지명에 따라 디렉토리를 생성합니다. 위의 예시에서 “com.example” 패키지는 “com” 디렉토리 안에 있고, “com” 디렉토리 안에 “example” 디렉토리가 있어야 합니다.
- 클래스 파일은 해당 패키지의 디렉토리에 위치해야 합니다.
클래스 파일 구성
- 클래스 파일은 패키지 선언 다음에 위치하며, 패키지 내의 다른 클래스에서 사용될 수 있습니다.
- 클래스 파일은 패키지에 따라 계층적으로 구성되어 있습니다.
다른 패키지의 클래스 사용 – import
- 다른 패키지의 클래스를 사용하려면 import 문을 사용합니다.
- import 문을 사용하지 않고도 패키지 이름을 포함하여 직접 클래스를 참조할 수도 있습니다.
- 예를 들어, “com.otherpackage” 패키지에 있는 “OtherClass”를 사용하려면 다음과 같이 선언합니다.
package com.example;
import com.otherpackage.OtherClass;
public class MyClass {
// OtherClass 사용 가능
}
Java클래스의 접근 제어자
- 클래스의 접근 제어자에 따라 같은 패키지 내에서만 접근하거나 다른 패키지에서도 접근할 수 있도록 설정할 수 있습니다.
💡이러한 방법을 통해 자바에서 패키지를 활용하여 코드를 구조화하고 네임스페이스를 관리할 수 있습니다. 패키지를 사용하면 프로젝트의 유지보수성을 향상시키고 클래스 이름의 충돌을 방지할 수 있습니다.
패키지 – import
패키지 import문을 사용하면 다른 패키지에 속한 클래스를 현재의 클래스에서 사용할 수 있게 됩니다. 아래는 패키지 import를 사용하는 방법에 대한 자세한 설명입니다:
다른 패키지의 클래스를 가져오기
- 다른 패키지에 있는 클래스를 현재의 클래스에서 사용하려면 import 문을 사용합니다.
- import 문은 클래스 선언 전에 위치하며, 사용하려는 클래스의 패키지와 클래스 이름을 지정합니다.
// 다른 패키지에 있는 클래스를 가져오기
import com.example.OtherClass;
public class MyClass {
// OtherClass 사용 가능
}
Java와일드카드(*)를 사용한 패키지 import
- 여러 클래스를 한 번에 가져오려면 와일드카드(*)를 사용할 수 있습니다.
- 다만, 모든 클래스를 가져오는 것이 아니라 특정 패키지의 모든 클래스를 현재 클래스에서 사용할 수 있도록 해줍니다.
// com.example 패키지의 모든 클래스를 가져오기
import com.example.*;
public class MyClass {
// com.example 패키지의 모든 클래스 사용 가능
}
Java정적(Static) import 문
- 정적 멤버(static 멤버)를 직접 사용하려면 정적 import문을 사용할 수 있습니다.
- 이는 특정 클래스의 정적 멤버를 현재 클래스에서 패키지명을 생략하고 직접 사용할 수 있게 해줍니다.
// Math 클래스의 정적 메서드인 sqrt 직접 사용
import static java.lang.Math.sqrt;
public class MyClass {
double result = sqrt(25.0);
}
Java중복된 클래스 이름 처리
- 만약 두 개 이상의 패키지에서 동일한 이름의 클래스를 가져와야 하는 경우, 패키지명을 포함하여 구분하여 사용하거나, import문을 별칭(alias)과 함께 사용하여 충돌을 방지할 수 있습니다.
import com.example.OtherClass;
import com.otherpackage.OtherClass as AnotherClass;
public class MyClass {
// com.example.OtherClass와 com.otherpackage.AnotherClass 사용 가능
}
Java💡패키지 import문을 적절히 활용하면 코드를 간결하게 유지하면서 필요한 클래스를 다른 패키지에서 가져와 사용할 수 있습니다.
패키지 예제
아래는 패키지명을 포함하여 클래스를 사용하는 예제입니다.
먼저, 두 개의 패키지를 생성하겠습니다. 첫 번째 패키지에는 com.example 패키지를, 두 번째 패키지에는 com.otherpackage 패키지를 만들겠습니다.
패키지 구조
- com.example 패키지에는 OtherClass라는 클래스를 만듭니다.
- com.otherpackage 패키지에도 OtherClass라는 이름의 클래스를 만듭니다.
// com.example 패키지의 OtherClass.java
package com.example;
public class OtherClass {
public static void printMessage() {
System.out.println("This is com.example.OtherClass");
}
}
Java// com.otherpackage 패키지의 OtherClass.java
package com.otherpackage;
public class OtherClass {
public static void printMessage() {
System.out.println("This is com.otherpackage.OtherClass");
}
}
JavaMain 클래스
- 이제 Main 클래스에서 위에서 만든 패키지에 속한 OtherClass를 사용해보겠습니다.
// Main.java
public class Main {
public static void main(String[] args) {
// com.example 패키지의 OtherClass 사용
com.example.OtherClass.printMessage();
// com.otherpackage 패키지의 OtherClass 사용
com.otherpackage.OtherClass.printMessage();
}
}
Java- 이 예제에서 Main 클래스에서 com.example.OtherClass와 com.otherpackage.OtherClass를 각각 사용하고 있습니다.
- 패키지명을 포함하여 클래스를 사용함으로써 서로 다른 패키지에 속한 동일한 이름의 클래스를 구분할 수 있습니다.
실행 결과
- 위의 Main 클래스를 실행하면 두 클래스의 메시지가 출력됩니다.
This is com.example.OtherClass
This is com.otherpackage.OtherClass
Java💡이렇게 패키지명을 포함하여 클래스를 사용하면 중복된 클래스명이 있는 경우에도 각 클래스를 명시적으로 식별할 수 있습니다. 패키지 구조를 통해 코드를 더욱 체계적으로 유지할 수 있습니다.
결론
자바에서 패키지는 코드를 구조화하고 그룹화하여 관리하는 방법으로, 패키지명 규칙에 따라 소스 코드를 디렉토리에 구성하고, 패키지를 선언하여 클래스를 논리적으로 묶습니다. 다른 패키지의 클래스를 사용할 때는 import문을 활용하며, 패키지를 통해 네임스페이스를 유지하고 코드의 가독성과 유지보수성을 높일 수 있습니다.