자바스터디 - 7주차

megaseunghan·2022년 3월 20일
0

자바스터디

목록 보기
5/15
post-thumbnail

목표

자바의 패키지에 대해 학습하세요.

학습할 것 (필수)

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

package 키워드

package는 많은 클래스 || 인터페이스들을 체계적으로 관리하기 위해 사용한다. 자바의 클래스가 물리적인 하나의 파일이라면 패키지는 물리적인 하나의 디렉토리이다. 각 디렉토리의 계층 구조는 .으로 구분한다.

  • 패키지를 선언하는 방법은 다음과 같다.
package 패키지명;

위와 같은 명령문을 클래스나 인터페이스의 소스 파일에 추가하면 된다. 이때, 패키지 이름에는 패키지의 전체 경로를 포함해야만 한다.

Unnamed package

자바의 모든 클래스는 반드시 하나 이상의 패키지에 포함되어야 한다. 하지만 자바 컴파일러는 소스 파일에 어떤 패키지의 선언도 포함되지 않으면 기본적으로 이름 없는 패키지에 포함해 컴파일한다. 따라서 패키지를 명시하지 않은 모든 클래스와 인터페이스는 모두 같은 패키지(default package)에 포함된다.

FQCN(Fully Qualified Class Name)

모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다. 이 둘을 합쳐야 완전하게 한 클래스를 표현할 수 있으며, FQCN이라 한다.

Scanner -> java.util(Scanner의 패키지).Scanner(FQCN)

import 키워드

선언한 패키지에 속한 클래스를 다른 파일에서 사용하기 위해서는 클래스 이름 앞에 패키지의 경로까지 포함한 풀 네임을 명시해 사용해야 한다.

하지만 클래스를 사용할 때 마다 이렇게 긴 이름을 사용하는 것은 비효율적이므로 import 키워드를 클래스 최상단에 명시하여 자바 컴파일러에게 코드에 사용할 클래스의 패키지 정보를 미리 제공한다.

import의 선언

import 패키지이름.클래스이름;
import 패키지이름.*; 

*은 패키지에 속한 모든 클래스를 불러옴을 의미한다.

import 키워드 사용의 편리성 예제

// import 키워드를 사용하지 않았을 때
public class ImportExample {
  com.seung.pack.Import import = new com.seung.pack.Import();
}


// import 키워드를 사용했을 때
import com.seung.pack.Import

public class ImportExmaple {
  Import import = new Import();
}

import의 특징

  • *를 사용하는 것이 해당 패키지에 포함된 다른 모든 하위 패키지의 클래스까지 포함해 주는 것은 아니다.
  • java.lang 패키지에 대해서는 import문을 사용하지 않아도 클래스 이름만으로 사용할 수 있도록 한다.(Built in Package)

static import

static 키워드를 가진 메소드 및 변수는 패키지, 클래스를 import하지 않아도 사용이 가능하다.

클래스패스

클래스를 찾기 위한 경로.

JVM이 프로그램을 실행할 때 클래스 파일을 찾는 기준 파일 경로를 말한다. default는 현재 경로를 바라보게 된다.

  • 자바 프로그램 실행 과정

자바의 프로그램 실행 과정 중, .java 파일을 .class로 변환하는 과정 즉, 자바 파일이 바이트 코드로 변환되고 Class Loader가 이 .class 파일을 읽기 위해서는 해당 파일의 위치를 찾을 수 있어야 한다. 이 때 classpath에 지정된 경로를 사용한다. classpath는 .class 파일이 포함된 디렉토리와 파일을 :으로 구분한 목록이다.

classpath에 사용할 수 있는 값

  • /Users/dir/ 등 디렉토리 형식
  • classes.zip 등의 zip 파일
  • .jar (자바 아카이브) 파일

세 가지 유형을 모두 사용한다면 다음과 같이 지정할 수 있다.

/export/home/username/java/classes:/export/home/username/java/classes/util.zip:/export/home/username/java/classes/xxx.jar

classpath 사용법

기본적으로 패키지에 포함되지 않은 java 소스 파일을 컴파일할 때, classpath를 설정하게 된다. .java 파일 이름을 abc.java로 지정했다고 가정하고, javac abc.java 명령을 사용하여 파일을 컴파일하면 javac 명령을 실행한 디렉토리에 컴파일된 .class 파일이 생성된다. 이 디렉토리를 /export/home/username이라고 가정할 때 /export/home/username/abc.class 파일이 생기는데 abc.java 파일에 포함된 프로그램을 실행하려면 classpath를 지정해주어야 한다.

클래스패스를 지정할 수 있는 방법은 두 가지이다.

  1. 시스템 환경변수 CLASSPATH를 사용하는 방법
  2. java runtime에 -classpath 옵션을 사용하는 방법

CLASSPATH 환경 변수

환경변수는 운영체제에 지정하는 변수로 JVM과 같은 애플리케이션들은 환경변수의 값을 참고해서 동작하게 된다. 자바는 클래스패스로 환경변수 CLASSPATH를 사용하는데, 이 값을 지정하면 실행할 때마다 -classpath 옵션을 사용하지 않아도 돼 편리하지만 운영체제가 바뀐다면 path가 사라진다.

-classpath 옵션

CLASSPATH=/export/home/username
  
// 현재 작업 디렉토리가 /export/home/username인 경우 간단하게 설정이 가능하다.
CLASSPATH=.
// 다른 디렉토리에 클래스 파일이 더 있으면, 다음과 같이 classpath를 설정해야 한다.
CLASSPATH=/export/home/username:/export/home/username/util

접근제어자

클래스, 메소드, 인스턴스 및 클래스 변수를 선언할 때 사용된다. 총 네 가지로 public, private, default, protected가 있다.

각 제어자의 접근 권한

  • public : 누구든 접근 가능
  • protected : 같은 패키지에 있거나 상속 받는 경우 접근 가능
  • private : 해당 클래스 내에서만 접근 가능
  • default : 같은 패키지 내에서 접근 가능

0개의 댓글