본문 바로가기

자바

자바에서 패키지 그리고 클래스패스(CLASSPATH) - 스터디 7차

7차 패키지 그리고 클래스패스에 대해서 학습할게요.

 

1.  자바에서 package는 무엇을 말하는거야?

 
패키지는 관련 클래스 및 인터페이스 집합을 구성하는 네임스페이스라고 정의 합니다. 개념적으로 패키지는 컴퓨터의 폴더와 유사하다고 하는데, 한 폴더에는 HTML 페이지를, 다른 폴더에는 이미지를, 또 다른 폴더에는 스크립트나 응용 프로그램을 보관할 수 있다고 설명하네요.
 
또한 Java 프로그래밍 언어로 작성된 소프트웨어는 수백 또는 수천 개의 개별 클래스로 구성될 수 있으므로 관련 클래스와 인터페이스를 패키지에 배치하여 구성하는것이 합리적이라고 합니다.
 

 
폴더와 비슷하지만, 클래스, 하위 패키지 및 인터페이스 그룹을 비슷한 것들끼리 모아서 관리하기 쉽게 캡슐화하는 메커니즘이라고 이해하시면 좋을 것 같네요.
 
 
패키지 이름과 디렉터리 구조는 밀접하게 관련되어 있습니다. 예를 들어, 패키지 이름이 college.staff.cse 인 경우, college , staff 및 cse 라는 3개의 디렉토리가 있으며, cse 는 staff 에 있고 staff 는 College 내부에 있는 구조 입니다.
보통 도메인 이름을 거꾸로 쓰는 것이 관례라고 합니다.
 

패키지 이름 명명 규칙

패키지 명명 규칙은 다음과 같습니다.

  • 패키지 이름은 모두 소문자여야한다.
  • 자바의 예약어를 사용하면 안된다. (예, int, static)
  • 개발 패키지 표준은 정하는 것에 따라 지정하면 된다.

패키지 유형

패키지 유형은 기본적으로 2가지로 분류할 수 있습니다.

  • Java API 패키지 또는 내장 패키지
  • 사용자 정의 패키지

 

2.  import 키워드

다른 패키지 안의 클래스를 사용하기 위해서는 클래스 이름 앞에 패키지를 붙여야 합니다.
 
하지만 다른 패키지에 속한 클래스의 이름 앞에 매번 패키지 이름을 붙이는 것은 상당히 번거로운 작업이기 때문에
import 키워드를 통해 라는 작업으로 패키지를 매번 입력하는 단점을 없애 줄 수 있습니다.
 
임포트 작업을 해주면 다른 패키지 안의 클래스를 사용할 때 클래스 이름만 적어주면 됩니다.
 
static import도 있는데, public static 메서드의 경우 클래스명을 적지 않고 사용할 수 있습니다.

package com.eatplace.user;
import static java.util.Objects.isNull;

public static void main(String[] args) {

	Study study = studyFactory.getStudy();
    
    if(isNull(study)) {
      System.out.println("study is null");
    }
  }

 

인텔리제이 사용시 단축키

Setting - Editor - General - Auto Import에 들어가서 설정을 통해 Auto import를 사용할 수 있고

control + option + o 누르면 사용하지 않는 import 패키지를 제거할 수 있으니 코드정리할 때 이용하면 꿀팁
윈도우는 control + alt + o 입니다.

 

3.  클래스패스

클래스패스는 말 그대로, 자바가 클래스를 사용하려고 탐색을 할 때 JVM 혹은 자바 컴파일러가 사용하는 파라미터로 클래스나 패키지를 찾을 때 기준이 되는 경로를 말합니다.
 
소스 코드(.java)를 컴파일하면 바이트코드(.class)로 변환되고 JVM이 바이트코드로 된 파일을 실행하려면 찾아야 하는데 이 바이트코드까지의 경로를 클래스패스라고 합니다.

 

4.  -classpath 옵션

Java의 -classpath 옵션은 프로그램에서 사용되는 클래스 파일 및 JAR 파일의 위치를 지정하는 데 사용되는 명령줄 인수입니다. Java 프로그램을 컴파일하거나 실행할 때 Java 컴파일러(javac)와 JRE(Java Runtime Environment)는 프로그램에서 사용하는 클래스를 찾을 위치를 알아야 합니다. -classpath 옵션을 사용하면 이러한 클래스에 대한 검색 경로를 설정할 수 있습니다.
 
이런식으로 명령줄 사용하면 됩니다.

  • Java 프로그램 컴파일: javac -classpath path1;path2 MyClass.java
  • Java 프로그램을 실행하는 경우: java -classpath path1:path2 MyClass

 

 

5.  접근제어자

접근제어자는 클래스, 메소드, 인스턴스 및 클래스 변수를 선언할 때, 사용됩니다.
자바에서 사용하는 접근제어자는 public, protected, package-private(접근 제어자 없음), private로 총 4가지 입니다.

 

public

- 누구나 접근 가능하다.

protected

- 같은 패키지에 있거나, 상속 받는 경우 사용할 수 있다.

package-private

- 아무 접근제어자를 적어주지 않은 경우이며, package-private라 불린다. 같은 패키지 내에서 접근 가능하다.

private

- 해당 클래스 내에서만 접근 가능하다.

 

Reference

[패키지]
https://docs.oracle.com/javase/tutorial/java/concepts/package.html
https://www.geeksforgeeks.org/packages-in-java/
https://techvidvan.com/tutorials/packages-in-java/