본문 바로가기
Java

[자바 스터디] #7 - 패키지

by zannew 2021. 2. 17.

 목표

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

▣ 학습할 내용

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

 

▶ 7-1 package 키워드

 

▷ 패키지란?

클래스의 묶음이다. 패키지 안에 클래스나 인터페이스를 포함시킬 수 있다. 클래스가 물리적으로 하나의 클래스 파일이라고 할 때 패키지는 물리적으로 하나의 디렉토리가 될 수 있다. 

  • 소스파일에서 (주석과 공백을 제외한) 첫 번째 문장에서 단 한 번의 패키지 선언만을 허용한다.
  • 모든 클래스는 반드시 하나의 패키지에 속해야 한다.
  • 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
  • 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉터리이다. 
  • 패키지와 클래스 이름을 모두 표현한 것이 완전한 클래스명이라고 할 수 있고, FQCN(Fully Qualified Class Name)이라고도 한다.

 

▷ 패키지의 선언

패키지는 아주 간단하게 다음과 같이 선언할 수 있다.

package 패키지이름;

패키지 이름은 대소문자를 허용하지만, 클래스 이름과 헷갈리지 않기 위해 소문자 사용을 원칙으로 하고 있다.

 

▶ 7-2 import 키워드

소스코드 작성 시 다른 패키지의 클래스를 사용할 때 패키지명이 포함된 클래스명을 사용해야 한다. 하지만 매번 풀네임을 작성하기 불편하기 때문에 import를 사용하여 해당 클래스의 패키지부터 클래스까지 작성한다. 작성된 클래스의 전체 경로는 패키지 정보를 제공하기에 컴파일 시 컴파일러가 사용된 클래스의 패키지를 알아내어 자동으로 모든 클래스 앞에 패키지명을 붙여주게 된다.

일반적으로 소스파일 구성은 다음과 같은 순서로 작성된다.(package명 -> import문 -> 클래스 선언)

package test;		// first

import static java.lang.System.out;		// second

class Test {					// third
	out.println("hello");
}

위의 예시는 static import문의 예시다. import를 사용하면 클래스의 패키지명을 생략할 수 있고, static import문을 사용하는 경우 static변수나 메서드를 호출할 때 필요한 클래스 이름을 생략할 수 있다. 특정 클래스의 static멤버를 자주 사용하는 경우에 static import를 사용하면 편리하고 코드도 간결해진다.

 

▶ 7-3 클래스 패스 (Classpath)

JVM이나 자바 컴파일러가 사용하는 파라미터이다. 클래스나 패키지를 찾을 때 기준이 되는 경로이다. 즉, java 명령을 실행하는 위치를 의미한다. 

 

 

▶ 7-4 CLASSPATH 환경변수

앞에서 설명한 클래스 패스를 환경 변수를 통해 운영체제에 지정할 수 있다. 환경변수를 설정하면 실행할 때마다 -cp(classpath)옵션을 사용하지 않아도 된다. JVM이 시작될 때 JVM의 클래스 로더는 CLASSPATH환경 변수를 호출한다. 

 

 

▶ 7-5 -classpath 옵션

컴파일러가 컴파일하기 위해 필요한 참조 예정인 클래스 파일들을 찾기 위해 컴파일 시 파일 경로를 지정해주는 옵션

옵션에 -classpath 또는 -cp로 설정할 수 있다.

javac <option> <source files>
java <option> <source files>

 

 

 

▶ 7-6 접근 지시자(Access Modifier)

 

접근 제어자라고도 불리며 멤버 또는 클래스에 사용되어 해당 멤버 또는 클래스를 외부에서 접근할 수 있는 범위를 제한할 수 있다. default의 경우 실제로 default를 붙이지는 않는다.

▷ 접근 지시자가 사용될 수 있는 곳 -> 클래스, 멤버 변수, 메서드, 생성자

제어자 같은 클래스 같은 패키지 자손 클래스  전체
public O O O O
protected O O O X
default O O X X
private O X X X

 

▷ 대상에 따라 사용할 수 있는 접근 제어자

대상 사용가능한 접근 제어자
클래스 public, (default)
메서드 public, protected, (default), private
멤버변수
지역변수 X

 

 

접근 지시자를 사용하는 이유는 클래스 내부의 데이터를 보호하기 위해서이다. 중요한 데이터, 값을 변경하지 못하게 막기 위해 외부에서의 접근을 막는 것이 필요하다. 이때 객체지향 개념의 캡슐화에 해당하는 내용이라고 할 수 있다. 

예시로 메서드 하나를 수정한다고 했을 때, 접근 제어자가 private이라면 해당 메서드가 속한 클래스만 체크하면 메서드 수정으로 인해 발생하는 오류가 있는지 없는지 확인할 수 있고, default라면 패키지 내부에서만 확인하면 되지만, public이라면 체크해야 할 범위가 너무 넓다. 접근 지시자를 적절히 활용하면 유지, 보수도 효율적으로 할 수 있도록 도움이 될 것이다. 

 

 

 

백기선님의 자바 라이브 스터디 커리큘럼을 따라 공부하고 있습니다. 

잘못된 점이나 보충할 부분이 있으면 코멘트 남겨주세요

작은 조언이 저에겐 성장의 원동력이 됩니다 :-)

댓글