패키지

이상민·2021년 7월 15일
0
post-thumbnail

1. Package 키워드

패키지는 클래스들과 인터페이스들을 번들링 하는 단위

  • 요소들을 찾거나 사용하기 쉽게하고, 이름의 충돌을 피하고, 접근을 제어하고, 연관된 타입을 번들하는 용도로 사용한다

  • 클래스와 인터페이스를 한 패키지로 묶는 이유 : 접근성과 가독성을 높이고 네임 스페이스 충돌 x, 액세스 관리

패키지의 정의: 패키지는 연관된 타입을 그룹핑해서 접근 보호와 네임 스페이스 관리를 해줍니다. 여기서 타입은 클래스, 인터페이스, 열거 및 애노테이션 타입을 의미합니다. 열거형과 애노테이션 타입은 클래스와 인터페이스의 특별한 유형이므로 여기서는 타입을 클래스 및 인터페이스라고 하겠습니다.

  • 소스 파일의 첫번쨰 라인에 패키지문을 선언해 패키지 새성 가능

  • 하나의 public 타입만 가질 수 있고, public 타입이 아닌 것들은 같은 레벨에 놓지 않는걸 권장함

1-1. 패키지 네이밍

패키지명 = 네임 스페이스

  • 네임 스페이스 : 개체를 구분할 수 있는 범위

  • 동일 네임 스페이스에선 같은 이름을 가질 수 없다

  • 패키지명은 소문자로 작성하고, 도메인의 역순으로 한다
    ex) com.naver.mypackage

1-2. 패키지 멤버 사용

패키지를 구성하는 타입들을 통틀어 부르는 명칭

  1. 풀패키지 경로로 멤버를 참조
  2. 특정 패키지 멤버를 import
  3. 전체 패키지를 import

1-3. 패키지의 구조

  • 패키지는 폴더, 패키지 멤버를 .java 파일로 나타낼 수 있다.
    ex) com.naver.mypackage.MyClass의 실제 패키지 구조
    -> .../com/naver/mypackage/MyClass.java

  • 각 클래스마다 컴파일 시 클래스 파일이 생성되고, 클래스 파일이 꼭 자바 파일과 같은 경로에 있을 필요는 없다. 때문에 소스코드를 공개하지 않고 컴파일된 코드만 제공할 수도 있다


2. import 키워드

다른 소스파일에 있는 멤버를 사용하기 위한 키워드

2-1. 풀패키지 경로로 멤버 참조하기

  • 가독성이 좋지 않아 잘 사용하지 않는다
mypackage.MyClass object = new mypackage.MyClass();

2-2. 패키지 멤버 import 하기

import mypackage.MyClass;

MyClass object = new MyClass();

2-3. 전체 패키지 import 하기

  • 자바는 java.lang패키지와 현재 패키지를 자동으로 import한다
import mypackage.*;

MyClass object = new MyClass();

2-4. static import

  • static 멤버에 자주 접근하는 경우 static import를 통해 깔끔하게 import할 수 있다
// static import 하지 않은 경우
double pi = Math.PI;

// static import
import static java.lang.Math.PI;
double pi = PI;

3. CLASSPATH

  • .class 파일을 별도의 위치에 관리 시, CLASSPATH 환경 변수를 설정해 위치를 관리할 수 있다
// 변수 표시
echo $CLASSPATH

// 변수 삭제
unset CLASSPATH

// 변수 설정
export CLASSPATH=~/java/classes
  • JDK에 -classpath라는 옵션을 줄 수 있다. 옵션 설정 시 환경변수를 대체해 옵션의 경로를 사용한다

4. 접근 지시자

  • 접근 지시자를 통해 클래스 내부, 동일 패키지, 상속, 그 이외에서 접근 가능 여부를 관리할 수 있다

profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글