학습할 것

  • package 키워드
  • import 키워드
  • 클래스패스
  • CLASSPATH 환경변수
  • -classpath 옵션
  • 접근지시자

package 키워드


패키지(package)란, 클래스 묶음입니다.
패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있습니다.
같은 이름의 클래스일 지라도 서로 다른 패키지에 존재하는 것이 가능해서,
다른 개발자가 개발한 클래스 라이브러리의 클래스 이름과 충돌하는 것을 피할 수 있습니다.

클래스가 물리적으로 하나의 클래스파일(*.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리입니다.

예를 들어, java.lang.String 클래스는 디렉토리 java의 서브 디렉토리인 lang에 속한 String.class 파일입니다.

  • 하나의 소스파일에는 첫 번째 문장으로 단 한번의 패키지 선언만을 허용합니다.
  • 모든 클래스는 반드시 하나의 패키지에 속해야 합니다.
  • 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있습니다.
  • 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리입니다.

패키지 선언

클래스나 인터페이스의 소스파일(.java)의 맨 위에 다음과 같이 한 줄만 적어주면 됩니다.

package 패키지명;

클래스명과 쉽게 구분하기 위해서 소문자로 하는 것을 원칙으로 하고 있습니다.
모든 클래스는 반드시 하나의 패키지에 포함되어야 합니다.
소스파일에 자신이 속한 패키지를 지정하지 않는 모든 클래스는 자동적으로 이름 없는 패키지에 속하게 됩니다.

import 키워드


import문은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공합니다.

import 선언

모든 소스파일(*.java)에서 import문은 package문 다음에, 그리고 클래스 선언문 이전에 위치해야 합니다.
import문은 package문과 달리 한 소스파일에 여러 번 선언할 수 있습니다.

import 패키지명.클래스명;
or
import 패키지명.*; 👈 지정된 패키지에 속하는 모든 클래스

클래스패스


클래스패스는 컴파일러(java.exe)나 JVM등이 클래스 위치를 찾는 데 사용되는 경로입니다.

소스 코드(.java)를 컴파일하면 바이트코드(.class)로 변환되고 JVM이 바이트코드로 된 파일을 실행하려면 찾아야 하는데 이 바이트코드까지의 경로를 클래스패스라고 합니다.

.java 파일 👉 Compile 👉 .class 파일

클래스 패스를 지정하는 방법

  • classpath 환경 변수 사용
  • java runtime에 -classpath 옵션 사용

CLASSPATH 환경 변수 사용


윈도우에선 내PC - 속성 - 고급 시스템 설정 - 고급 탭 - 환경변수 - 새로 만들기에서
classpath라고 변수 이름을 지정하고
변수 값을 JAVA_HOME 아래의 lib 폴더로 지정해주면 됩니다.

java runtime에 -classpath 옵션 사용

javac <options> <source files>

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

만약 BestStar.java 파일이 C:\Java 디렉터리에 존재하고 필요한 클래스 파일들이 C:\Java\BestStarClass에 위치한다면

javac -classpath C:\Java\BestStarClass C:\Java\BestStar.java

로 해주면 됩니다.

만약 참조할 클래스 파일들이 다른 디렉터리에도 존재한다면

javac -classpath .;C:\Java\BestStarClass;C:\Java\ABCDEFG;C:\Java\BestStar.java

과 같이 세미콜론(;)으로 구분해줄 수 있습니다.
참고로 도트(.)는 현재 디렉토리를 의미합니다.

이러한 -classpath 옵션을 사용하지 않을 경우 클래스 파일이 위치한 현재 디렉토리를 기본 클래스로 잡아줍니다.

💡 -classpath 옵션은 java(런타임)와 javac(컴파일타임) 명령어에 모두 사용할 수 있습니다.

접근지시자


클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
종류 : private, default, protected, public

  • private
    : 같은 클래스 내부에서만 접근 가능(외부 클래스, 상속 관계의 클래스에서도 접근 불가)
  • default
    : 접근 제어 지시자를 선언하지 않는 경우, 동일 패키지 내에서만 접근 가능(상속 관계라도 패키지가 다르면 접근 불가)
  • protected
    : 동일 패키지나 상속관계의 클래스에서만 접근 가능하고 그 외 외부에서는 접근 불가
  • public
    : 어디서든 접근 가능한 인스턴스 변수 및 메소드

출처

https://doozi0316.tistory.com/entry/JAVA-7%EC%A3%BC%EC%B0%A8-%ED%8C%A8%ED%82%A4%EC%A7%80-package-import-classpath
https://beststar-1.tistory.com/17
https://computer-science-student.tistory.com/321

0개의 댓글