맨위로가기

자바 패키지

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

자바 패키지는 자바 소스 파일 내 클래스들을 묶는 단위로, `package` 키워드를 사용하여 선언하며, 소스 파일당 하나의 패키지만 선언할 수 있다. 다른 패키지의 클래스를 사용하기 위해 `import` 문을 사용하며, 클래스의 정규화된 이름을 직접 사용할 수도 있다. 패키지 선언이 없으면 익명 패키지에 속하게 되며, 패키지 전체를 설명하는 문서는 `package-info.java` 파일에 Javadoc 형식으로 작성한다. 패키지 접근 제어는 `public`, `private`, `protected` 및 default(package-private) 접근 권한을 통해 이루어진다. JAR 파일은 `jar` 명령어를 사용하여 생성하며, 패키지 명명 규칙은 충돌을 방지하기 위해 계층 구조를 따른다. 자바 SE 버전별 주요 패키지 목록과 Java SE 9 이후 모듈 시스템에 대한 정보도 포함한다.

더 읽어볼만한 페이지

  • 자바 (프로그래밍 언어) - 자바 애플릿
    자바 애플릿은 웹 페이지에서 실행되는 자바 기반 프로그램으로, 웹 상호작용성을 높였으나 기술적 문제와 웹 표준 기술 발전에 따라 쇠퇴하여 사용이 중단되었다.
  • 자바 (프로그래밍 언어) - 자바FX
    JavaFX는 자바 기반의 UI 구축 플랫폼으로, 다양한 플랫폼을 지원하며 풍부한 UI 기능들을 제공하고, Java 8부터 JDK에 포함되었다가 JDK 11부터 분리되어 관리된다.
자바 패키지
개요
자바 로고
자바 로고
유형프로그래밍 언어
설계자제임스 고슬링
개발자오라클
최초 출시일1995년 5월 23일
안정화 버전21.0.2 (2024년 1월 16일)
최신 미리보기 버전22-ea+13 (2024년 1월 18일)
운영 체제크로스 플랫폼
라이선스GNU 일반 공중 사용 허가서 버전 2 (일부 구성 요소)
자바 라이선스
웹사이트java.com
기술 정보
파일 확장자.java
.class
.jar
.war
.ear
영향을 받은 언어C 언어
C++
에이다
스몰토크
Objective-C
파스칼
영향을 준 언어C#
코틀린
스칼라
그루비
J#
자바스크립트
PHP
파이썬
루비
ActionScript
D
Ceylon
Xtend
Processing
Vala
종류클래스 기반 언어, 객체 지향 프로그래밍
구현 언어C 언어

2. 패키지 사용

자바 소스 파일에서 `import` 문을 사용하면 다른 패키지에 속한 클래스를 불러와 사용할 수 있다. `import` 문은 다음과 같이 사용한다.

```java

import java.awt.event.*;

```

위 코드는 `java.awt.event` 패키지의 모든 클래스를 가져온다.[1] 특정 클래스만 가져오려면 다음과 같이 작성한다.

```java

import java.awt.event.ActionEvent;

```

위 코드는 `java.awt.event` 패키지에서 `ActionEvent` 클래스만 가져온다.[1]

`import` 선언을 사용하면, 가져온 클래스를 간단한 이름으로 참조할 수 있다.

```java

ActionEvent myEvent = new ActionEvent();

```

`import` 선언 없이 클래스의 전체 이름을 사용하여 클래스를 참조할 수도 있다.[1]

```java

java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();

2. 1. 패키지 선언

자바 소스 파일에서 `package` 키워드는 이 파일의 클래스나 클래스들이 속하는 패키지를 지정한다. 이 키워드는 일반적으로 소스 파일에서 처음 오는 키워드이다. 하나의 소스 파일에는 하나의 패키지만 선언할 수 있다.

```java

package com.example.myapp;

2. 2. 클래스 가져오기 (Import)

`import` 문을 사용하면 다른 패키지의 클래스를 현재 소스 파일에서 사용할 수 있다. 특정 클래스만 가져오려면 `import com.example.myapp.MyClass;`와 같이 쓰고, 패키지의 모든 클래스를 가져오려면 `import com.example.myapp.*;`와 같이 쓴다. `import` 없이 전체 클래스 이름을 사용하여 클래스를 참조할 수도 있다.[1]

```java

import java.awt.event.*;

```

위 코드는 `java.awt.event` 패키지로부터 모든 클래스들을 가져온다.[1]

```java

import java.awt.event.ActionEvent;

```

위 코드는 해당 패키지에서 `ActionEvent` 클래스만 가져온다.[1]

```java

ActionEvent myEvent = new ActionEvent();

```

위와 같이 `import` 선언 뒤에 단순한 클래스 이름을 사용하여 `ActionEvent` 클래스를 참조할 수 있다.[1]

```java

java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();

```

위와 같이 클래스들은 `import` 선언 없이 직접 사용할 수도 있다.[1]

2. 3. 익명 패키지 (Unnamed Package)

패키지를 선언하지 않으면 클래스는 익명 패키지에 속하게 된다. 익명 패키지의 클래스는 다른 패키지에서 가져올 수 없다.[3] 공식 자바 튜토리얼에서는 이러한 방식을 권장하지 않는다.

일반적으로 익명 패키지는 소규모 또는 임시 애플리케이션을 만들거나 개발 프로세스를 시작할 때만 사용한다. 그렇지 않은 경우 클래스와 인터페이스는 이름을 가진 패키지에 속해야 한다.[4]

2. 4. 패키지 전체 Javadoc 및 애노테이션

Javadoc 형식으로 작성되는 전체 패키지 설명 문서는 `package-info.java` 파일에 작성된다.[2] 이 파일은 패키지 내 모든 클래스에서 사용될 주석을 포함할 수 있다. 자바 SE 5부터 추가된 애노테이션은 패키지에도 적용 가능하다.

패키지에 애노테이션을 추가하려면 패키지 디렉터리에 `package-info.java` 파일을 생성하고 다음과 같이 작성한다.

```java

/**

  • 패키지 설명.
  • 패키지 주석에는 Javadoc 태그를 사용할 수 있다.
  • /

@Deprecated package com.example.wikipedia;

```

위 예시는 `com.example.wikipedia` 패키지를 사용 중단으로 표시한다. `package-info.java`는 자바 컴파일러가 경고를 표시하게 할 뿐만 아니라, Javadoc에서 패키지 설명을 표시하는 문서를 생성하는 데에도 사용된다. `package-info.java`는 패키지에 애노테이션을 추가하기 위해 만들어졌으며, 기존의 `package.html`을 대체한다.

3. 패키지 접근 제어

자바 패키지는 클래스와 멤버의 접근 범위를 제어하는 데 사용된다. 패키지 내의 클래스는 'default'(package-private) 접근 권한으로 선언된 클래스와 멤버에 접근할 수 있으며, 클래스나 멤버가 `public`, `protected`, `private`로 선언되지 않은 경우 기본 접근 권한이 적용된다.[5]

3. 1. 접근 제한자

공개(public) 멤버와 클래스는 어디에서나 볼 수 있으며, 비공개(private) 멤버는 동일한 클래스 내에서만 볼 수 있다. 패키지 내의 클래스는 기본(default, package-private) 접근 권한으로 선언된 클래스와 멤버는 물론, `protected` 접근 제어자로 선언된 클래스 멤버에도 접근할 수 있다. 클래스 또는 멤버가 `public`, `protected`, `private`로 선언되지 않은 경우 기본(package-private) 접근 권한이 적용된다.[5]

다른 패키지의 클래스는 기본 접근 권한으로 선언된 클래스와 멤버에 접근할 수 없다. 그러나 `protected`로 선언된 클래스 멤버는 선언 클래스의 하위 클래스(서브클래스)인 다른 패키지의 클래스뿐만 아니라 동일한 패키지의 클래스에서도 접근할 수 있다.[5]

4. JAR 파일 생성

`jar` 명령 줄 유틸리티를 사용하여 클래스 파일들을 JAR 파일로 압축할 수 있다. 다음은 그 예시이다.

```java

jar cf myPackage.jar *.class

```

위 명령어는 확장자가 `.class`인 모든 파일을 `myPackage.jar`라는 JAR 파일로 압축한다. 명령 줄 옵션 'c'는 `jar` 명령어에 "새 아카이브 생성"을 지시하고, 'f' 옵션은 파일 생성을 지시한다. 파일 이름은 그 다음에 오며, JAR 파일의 내용물 앞에 지정된다.

5. 패키지 명명 규칙

패키지는 계층 구조 명명 패턴을 사용하여 정의되며, 계층 구조의 각 레벨은 마침표(`.`, "dot"으로 발음)로 구분된다.[6] 자바 언어 사양은 널리 배포될 패키지가 고유한 네임스페이스를 갖도록 고유한 패키지 이름을 만드는 방법을 설명하는 명명 규칙을 설정한다.[6]

일반적으로 패키지 이름은 조직의 도메인 이름을 역순으로 시작한다. 예를 들어, 한국에 있는 MySoft라는 조직이 분수를 처리하는 패키지를 만들 경우, `kr.co.mysoft.fractions`와 같이 명명하여 다른 회사에서 만든 유사한 패키지와 구별한다. 패키지 이름의 후속 구성 요소는 조직 자체의 내부 명명 규칙에 따라 달라진다.[6]

패키지 이름은 모두 소문자로 작성하는 것이 관례이다. 하이픈(-)이 포함된 도메인 이름은 밑줄(_)로 대체하여 Java소스 코드에서 사용한다.

6. Java SE 버전별 주요 패키지

Java SE는 여러 버전이 있으며, 각 버전마다 주요 패키지가 조금씩 다르다.

패키지 이름설명
`java.lang`import 문 없이 사용 가능한 기본 기능 및 유형
`java.util`컬렉션 자료 구조 클래스
`java.io`파일 작업
`java.math`다중 정밀 산술
`java.nio`논블로킹 I/O 프레임워크
`java.net`네트워킹, 소켓, DNS 조회
`java.security`키 생성, 암호화/복호화
`java.sql`자바 데이터베이스 연결 (JDBC)
`java.awt`네이티브 GUI 컴포넌트 기본 계층
`java.text`텍스트, 날짜, 숫자, 메시지 처리 (자연어 독립적)
`java.rmi`RMI 패키지
`java.time`날짜, 시간 관련 API
`java.beans`JavaBeans 구성 요소 관련
`java.applet`애플릿 생성 및 통신


6. 1. Java SE 8 핵심 패키지

java.langimport 문을 사용하지 않고도 사용할 수 있는 기본 언어 기능 및 기본 유형.
java.util컬렉션 자료 구조 클래스
java.io파일 작업
java.math다중 정밀 산술
java.nio자바용 논블로킹 I/O 프레임워크
java.net네트워킹 작업, 소켓, DNS 조회 등
java.security키 생성, 암호화 및 복호화
java.sql데이터베이스에 접근하기 위한 자바 데이터베이스 연결 (JDBC)
java.awt네이티브 GUI 컴포넌트용 패키지의 기본 계층 구조
java.text자연어에 독립적인 방식으로 텍스트, 날짜, 숫자 및 메시지를 처리하기 위한 클래스와 인터페이스를 제공합니다.
java.rmiRMI 패키지를 제공합니다.
java.time날짜, 시간, 순간 및 기간에 대한 주요 API.
java.beansJavaBeans 구성 요소와 관련된 클래스 및 인터페이스를 포함합니다.
java.applet애플릿을 생성하고 통신하기 위한 클래스 및 메서드를 제공합니다.


6. 2. Java SE 9 이후 모듈 시스템

자바 9(2017년 9월 21일 출시)에서 프로젝트 직소 개발 노력의 결과로, 일종의 패키지 모음인 "모듈" 지원이 구현되었다. 이 "모듈"은 이전에는 "슈퍼 패키지"라고 불렸으며 원래 자바 7용으로 계획되었다.

모듈은 소스 파일 계층 구조의 루트에 있는 ''module-info.java'' 파일에 배치된 선언에서 종속성을 설명한다. 자바 9 이후, JDK는 컴파일 시간과 런타임 모두에서 모듈 종속성을 확인할 수 있다. JDK 자체는 자바 9용으로 모듈화되었다.[8][9]

7. 추가 정보(Java SE 5의 애노테이션)

Java SE 5부터 추가된 애노테이션은 패키지에도 적용할 수 있다.[1] 패키지에 애노테이션을 적용하려면 해당 패키지 디렉터리에 `package-info.java` 파일을 만들고 패키지 관련 애노테이션을 작성한다.[1]

```java

/**


  • 패키지 설명.
  • 패키지 코멘트에는 Javadoc의 태그를 그대로 사용할 수 있다.
  • /

@Deprecated package com.example.wikipedia;

```

위 예시는 `com.example.wikipedia` 패키지를 사용 중단으로 표시하는 것이다.[1] 이 `package-info.java` 파일은 Java 컴파일러가 경고를 표시하도록 하는 것 외에도 Javadoc에서 패키지 설명을 표시하는 문서를 생성하는 데에도 사용된다.[1] `package-info.java`는 패키지에 애노테이션을 붙이기 위해 만들어졌으며, 기존의 `package.html`을 대체한다.[1]

참조

[1] 서적 The Java Language Specification, Third Edition 2005
[2] 웹사이트 Chapter 7. Packages and Modules https://docs.oracle.[...] 2021-12-10
[3] 웹사이트 Chapter 7. Packages http://docs.oracle.c[...] Docs.oracle.com 2013-09-15
[4] 웹사이트 Creating and Using Packages (The Java™ Tutorials > Learning the Java Language > Packages) https://docs.oracle.[...]
[5] 웹사이트 Controlling Access to Members of a Class (The Java™ Tutorials > Learning the Java Language > Classes and Objects) https://docs.oracle.[...]
[6] 웹사이트 Code Conventions for the Java Programming Language: 9. Naming Conventions http://www.oracle.co[...]
[7] 웹사이트 Packages https://docs.oracle.[...]
[8] 웹사이트 JDK Module Summary http://cr.openjdk.ja[...] Oracle Corporation 2015-10-23
[9] 웹사이트 Understanding Java 9 Modules https://www.oracle.c[...] Oracle Corporation 2017-10-01
[10] 웹사이트 Chapter 8. Classes | Java SE 8 Language Specification | Oracle https://docs.oracle.[...]
[11] 웹사이트 Chapter 9. Interfaces | Java SE 8 Language Specification | Oracle https://docs.oracle.[...]
[12] 웹사이트 Chapter 7. Packages | Java SE 8 Language Specification | Oracle https://docs.oracle.[...]
[13] 웹사이트 Controlling Access to Members of a Class (The Java™ Tutorials > Learning the Java Language > Classes and Objects) https://docs.oracle.[...]
[14] 서적 The Java Language Specification, Third Edition 2005



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com