공부방/JAVA

패키지 - 백기선 자바라이브스터디

EVO. 2023. 8. 24. 23:01

package 키워드


  • 클래스의 묶음 또는 물리적으로 하나의 디렉터리
  • 서로 관련되어 있는 것을 묶음으로써 효율적으로 관리
  • FQCN(Fully Qualified Class Name) :
    FQCN은 클래스가  속한 패키지명까지 모두 포함한 이름을 의미
    java.lang.String s = new java.lang.String(); 이 있다.
    물론 java.lang 패키지는 자동으로 임포트 되기 때문에 java.lang.String과 같이 선언할 필요는 없다
  • 점(.)을 구분자로 하여 계층구조로 구성
  • 모든 클래스는 반드시 하나의 패키지에 속해야 한다
    만약 패키지를 선언하지 않으면 자바에서 기본적으로 제공하는 이름없는패키지(unnamed package)에 속하게 된다
  • 규칙
    소문자를 원칙으로 함
    소스코드에서 주석과 공백을 제외한 첫 번째 줄에 딱 한번 선언되어야 한다
    자바의 예약어를 사용하면 안된다(int, static 등)
    패키지 이름을 java로 시작하면 안된다 

Built-in Package

자바API는 java 개발 환경에 포함되어 개발자들이 마음껏 가져다 쓸 수 있도록 미리 작성된 클래스 라이브러리다.

 

이 라이브러리에는 입력관리, 데이터베이스 프로그래밍 등을 위한 구성요소가 포함되어 있다. 해당 라이브러리를 보고 싶다면 공식문서에서 확인할 수 있다 ( https://docs.oracle.com/javase/8/docs/api/

 

  1. java.lang : 언어 지원 클래스(primitive type, Math class)를 포함하며 이 패키지는 명시하지 않아도 자동으로 가져온다
  2. java.io : 입력/출력 연산을 지원하는 클래스
  3. java.util : 링크드리스트, 딕셔너리 같이 데이터 구조를 구현하는 유틸리티 클래스
  4. java.applet 
  5. java.awt
  6. java.net

사용자 정의 패키지 선언

package 패키지명;

 

import 문


  • 다른 패키지에 있는 클래스를 사용해야 할 때 FQCN으로 적지 않고 패키지명을 생략하기 위해 사용됨
  • 같은 패키지 내의 클래스들은 import문을 선언하지 않아도 패키지명 생략 가능
  • 컴파일러에게 소스코드에 사용된 클래스의 패키지에 대한 정보를 제공 
  • 컴파일시 컴파일러는 import문을 통해 알게된 패키지를 모든 클래스명 앞에 붙여주면서 컴파일

규칙

package문 이후 클래스 선언 이전에 위치

 

선언

import 패키지명.클래스명;
import 패키지명.*; //해당 패키지에 속하는 모든 클래스를 사용하겠다는 의미

 

static import문

클래스에서 public static으로 정의된 멤버(필드나 메서드)를 해당 멤버가 정의된 클래스를 지정하지 않고 java코드에서 사용할 수 있도록 한다.

import static java.lang.System.*;

class StaticImport
{
	public static void main(String args[])
   {      
        out.println("babgeuleus");
   }
}

예를들어 System.out.println()의 System클래스를 선언하지않고 쓰는 방법은 위와 같이 static으로 선언해주면 된다

 

주로 사용하는 곳은 junit에서 import static org.junit.Assert.assertThat 을 선언하면서 패키지와  클래스를 적지 않고도 assertThat()만 씀으로써 읽는데 더 직관적이게 할 수가 있다(가독성 증가) 

 

 

클래스 패스


  • JVM이 자바 프로그램을 실행할때 클래스를 찾아 로드하는 데 사용하는 환경 변수
    .class 를 런타임 시점때 classpath에서 설정한 경로를 따라가 클래스파일과 라이브러리들을 가져옴 
    https://babgeuleus.tistory.com/82 에서 더 자세히 볼 수 있다 
  • 이 변수는 JVM이 클래스 파일을 찾아 로드할 디렉터리 , JAR 파일 및 ZIP 파일 목록을 지정한다.
  • 명령줄 또는 IDE에서 classpath를 설정할 수 있다

 


 

명령줄로 classpath 설정

명령줄을 통해 클래스 경로를 설정하려면 java 명령을 실행할 때 -classpath 옵션을 사용

java -classpath /path/to/class/files MyProgram

디렉터리 및 JAR 파일이 여러 개 있는 경우 콜론 ; 을 사용하여 구분할 수 있음

java -classpath /path/to/classes;/path/to/lib.jar MyProgram
java -cp /path/to/classes;/path/to/lib.jar MyProgram

 

build path

빌드 경로는 소스 파일, 클래스 파일, 라이브러리 및 종속성을 포함하여 Java 프로젝트를 빌드하는 데 필요한 모든 리소스의 목록이다 

Eclipse, IntelliJ IDEA 또는 NetBeans와 같은 Java 개발 환경은 빌드 경로를 사용하여 Java 프로젝트를 컴파일 및 빌드한다

 

Classpath와 Build Path의 차이

JVM은 런타임에 classpath를 사용하여 클래스 파일과 라이브러리를 찾는 반면, IDE는 빌드 프로세스 중에 build path를 사용하여 종속성(dependencies)을 찾는다 

  Classpath Build Path
사용 JVM 런타임 시점에 파일들을 찾는 데 사용 IDE가 빌드하는 동안 사용
설정 커멘드 명령어 또는 환경설정 IDE 내에서 설정
목적 class 파일과 라이브러리들을 찾는다 종속성을 찾는다

 

클래스 경로는 런타임뿐만 아니라 컴파일 및 테스트와 같은 다양한 빌드 단계의 빌드 시간에도 사용된다는 점에 주목할 필요가 있습니다. 빌드 시스템은 클래스 경로를 사용하여 빌드 프로세스에 필요한 클래스 및 라이브러리를 찾아 로드합니다.

클래스 경로와 빌드 경로는 모두 Java 프로그램을 성공적으로 실행하고 빌드하는 데 필수적입니다. 두 경로 중 하나를 올바르게 설정하지 않으면 오류가 발생하여 프로그램이 올바르게 실행되거나 빌드되지 않을 수 있습니다.

 

 

출처


https://kils-log-of-develop.tistory.com/430

https://pej4303.tistory.com/57

https://www.baeldung.com/java-classpath-vs-build-path

https://www.geeksforgeeks.org/packages-in-java/