케네스로그

[Java] 패키지 본문

Dev/Java

[Java] 패키지

kenasdev 2022. 2. 18. 22:16
반응형

package 키워드

package는 관련된 클래스들을 그룹화하기 위해 사용되며, 디렉토리의 폴더와 유사하다.

package는 두가지의 종류로 나누어진다.

  • build-in package
  • user-defined package

 

빌트인 패키지 build-in package

자바 개발환경에서 Java API는 미리 만들어진 클래스들로 이루어진 라이브러리이다. 이 라이브러리는 패키지와 클래스로 나뉘어지는데, 개발자는 import할때 클래스 하나만 import 할 수도 있지만, 해당 클래스가 속한 package전체를 import 할 수도 있다.

import java.util.ArrayList; // ArrayList class 하나만 import
import java.util.*; // ArrayList가 속해있는 util 패키지 전체 import

 

 

사용자 정의 패키지 user-defined package

사용자가 정의한 패키지로써, 흔히 개발할때 클래스파일을 만들때 같이 생성되는 package를 말한다.

 

패키지의 특성

  • 패키지 이름은 소문자만 가능하다
  • 자바의 예약어(java, new, static, void 등)은 사용할 수 없다
  • package 키워드를 통한 선언은 소스코드 가장 상단에 위치해야 한다.
  • 점(.)을 통해 계층구조를 구분한다

 

FQCN(Fully Qualified class name)

출처: https://dreamzelkova.tistory.com/entry/자바의-기초-FQCN-JARhttps://www.tutorialspoint.com/get-the-fully-qualified-name-of-an-inner-class-in-java

클래스가 속한 패키지명을 모두 포함한 이름을 Fully Qualified class name이라고 한다.

java.lang.String s = new java.lang.String();

위의 방법이 String클래스가 속해있는 build-in package경로까지 모두 언급한 FQCN방식의 사용법이다.

우리가 흔히 사용하는 방식은 Alias Name방식이며, 아래와 같다.

String s = new String();

 

 

import 키워드

출처 https://en.wikibooks.org/wiki/Java_Programming/Keywords/import

import는 자바 키워드로써, import문 아래에서 선언된 class를 사용할 수 있게 한다. 한번 import문으로 선언된 class는 해당 class가 포함된 패키지명을 모두 명시하지않아도 사용할 수 있다.

 

 

static import

특정 클래스의 static 멤버변수 또는 메소드를 사용하기 위해서 import static을 사용 할 수 있다. static과 함께 정의할 경우, 클래스를 명시하지 않고 즉시 변수, 메소드명으로 사용할 수 있다.

import static java.lang.Math.PI;

double r = cos(PI * theta);

 

 

클래스 패스

https://stackoverflow.com/questions/22265463/what-exactly-is-a-class-path-in-java

클래스패스는 환경 변수로, JVM이 .class 파일을 찾기위해 어디서부터 탐색해야하는지 알려주는 역할을 한다. class파일은 JAR에 포함되어 있으므로, JAR의 위치를 제공해야 한다. 해당 JAR이 위치한 패키지 구조의 가장 최상단 루트를 클래스패스 환경변수로 설정한다.

JAR(Java ARchive)는 여러개의 자바 클래스 파일, 해당 클래스들이 이용하는 관련 리소스 및 메타데이터를 하나의 파일로 모은 압축파일

import awesome.framework.MyClass;
import awesome.framework.*;
MyClass mine = new MyClass();

위의 경우처럼, 특정 패키지의 클래스를 import하여 객체를 생성하였다. 이렇게 클래스 파일을 참조하여 객체를 생성하기 위해서는 컴파일러(JVM)가 해당 클래스 파일이 컴퓨터 어딘가에 저장되어 있는지 알아야한다.

JVM이 컴퓨터 내에 존재하는 모든 경로를 탐색하며 클래스파일을 찾는것은 매우 비효율적인 과정이다.🥱 이러한 과정을 피하기 위해서 VM이 어느 위치를 찾으면 되는지 디렉토리 리스트(환경변수)를 제공한다. 이것을 classpath라고 한다.

classpath를 제공하는 방법은 환경변수를 사용하는것과, java runtime 시 -classpath 옵션을 사용하는 방법이 있다.

 

 

classpath 환경변수

  • 맥북유저
    • bash 사용시: terminal에서 ~/.bash_profile 에서 확인가능
    • zshell 사용시: ~/zshrc 에서 확인가능
      • 카탈리나 이후론 zshell이 기본 쉘로 되었다고...
    맥 JAVA환경설정 의문점
  • .zshrc에서 환경변수 설정을 한적이 없는데 java의 위치를 알고 실행한다?
  • 윈도우유저
    • 컴퓨터 시스템 변수 설정을 통해 설정

 

-classpath 옵션

컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일들을 찾기 위해, 컴파일 시 파일 경로를 직접 지정해주는 옵션이 -classpath 옵션이다.

javac -classpath {PATH} {file_to_compile}
반응형

'Dev > Java' 카테고리의 다른 글

[Java] 예외처리  (0) 2022.03.06
[Java] 인터페이스  (0) 2022.02.20
[Java] 메소드 디스패치  (0) 2022.02.16
[Java] 상속, super()  (1) 2022.02.15
[Java] 객체의 생성, 인스턴스화, 생성자, this 키워드  (0) 2022.02.09