스터디할래 - 7주차 과제: 패키지

 https://github.com/whiteship/live-study

👍목표

 

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

 

 

📖학습할 것 (필수)

 

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

 


 

package 키워드

 

패키지는 자바에서 클래스와 인터페이스를 체계적으로 관리하기 위해 사용한다. 패키지 없이 코드를 작성하게 된다면

 

적게는 수십 개, 많게는 수백 개의 클래스가 난잡하게 섞여 코드를 관리하기 어려울 것이다. 이러한 문제를 해결하기 위

 

해 우리가 폴더를 만들어 파일을 관리 하듯이 패키지를 만들어 클래스와 인터페이스를 관리 할 수 있다. 자바에서 패키

 

지는 물리적인 하나의 디렉터리를 의미한다.  

 

패키지는 단순 파일 시스템의 디렉터리 기능만 하는 것은 아니다. 패키지는 클래스를 식별하기 위한 용도로도 사용되는

 

데, 같은 이름의 클래스 명이라도 다른 패키지에 있다면 서로 다른 클래스로 인식한다. 즉, 클래스의 전체 이름은 "패키지

 

이름 + 클래스 이름"이며 .로 구분해서 표현한다.

 

패키지 이름은 도메인의 역순으로 작성한다. 예를 들어, google.com에서 계정과 관련된 기능을 모아둔 패키지를 작성한

 

다고 한다면, 패키지 형태는 다음과 같을 것이다.

 

package com.google.account;

public class AccountController {

}

 

패키지 명명 규칙

패키지 이름을 짓는데에는 몇가지 규칙이 존재 한다.

 

  1. 숫자로 시작하는 것은 불가능하다
  2. 특수 문자는 언더바(_), $만 사용 가능하다.
  3. java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 java로 시작하는 패키지는 불가능하다.
  4. 패키지 이름은 소문자로 작성한다.

 

import 키워드

 

다른 패키지에 있는 클래스를 사용하기 위해서는 클래스 이름 앞에 패키지의 경로까지 포함하여 명시해서 사용해야 한

 

다. 하지만 이렇게 코드를 작성하는 것은 번거로울 뿐만 아니라 비효율적이므로 자바에서는 import를 이용하여 매번 패

 

키지 경로 작성하는 것을 피할 수 있게 해준다.

 

import는 자바 컴파일러에게 코드에서 사용할 클래스의 패키지에 대한 정보를 미리 제공함으로써 다른 패키지에 속한

 

클래스를 패키지 이름을 제외하고 클래스 이름만을 사용할 수 있도록 한다.

 

 

import 선언 방법

import com.google.Account; // 해당 패키지의 특정 클래스를 사용하려는 경우

import com.google.*;       // 해당 패키지의 모든 클래스를 사용하려는 경우

 

 

자바에서 가장 많이 사용하는 java.lang 패키지에 대해서는 따로 import 선언을 하지 않아도 되며, 클래스 이름만으로도

 

사용 할 수 있다. 

 

 

static import

자바 1.5에 지원된 기능으로 메서드나 변수를 패키지, 클래스명 없이 접근 가능하게 해주는 기능이다. static import를 사

 

용함으로써 코드가 불필요하게 길어지는 것을 방지 할 수 있으며 이로 인해 코드의 유지보수 시 빠르게 해당 코드를

 

볼 수 있다는 장점이 있다.

 

// import 생략..
import static javax.persistence.CascadeType.ALL;
// annotation 생략..
public class Order {
	// field 생략..
    
    @OneToMany(mappedBy = "order", cascade = ALL)
    // cascade = ALL     -> CascadeType.ALL을 static import로 줄임
    private List<OrderItem> orderItems = new ArrayList<>();

}

 

 

클래스패스

 

클래스패스란 클래스를 찾기 위한 경로를 말하며,  JVM이 프로그램을 실행할 때 ".class 파일"을 찾는 기준이 되는

 

경로를 말하는 것이다.  자바 파일을 컴파일 하면 바이트코드로 변환이 되는데 런타임에 바이트코드에 포함된 명령을 실

 

행하려면 바이트코드를 먼저 찾아아 하는데, 이 때 클래스패스를 이용하여 찾는다.

 

클래스패스는 바이트코드에 포함된 디렉토리와 파일을 ':' 으로 구분하며, 지정된 경로를 검색해서 특정한 클래스에 대

 

한 .class 파일을 찾고, 첫번째로 발견한 것을 사용한다.

 

 

CLASSPATH 환경변수

 

CLASSPATH 환경변수를 터미널 혹은 명령 프롬프트에서 설정할 수도 있지만, 윈도우를 사용한다면 GUI를 이용하여 설

 

정할 수 있다.

 

 

 

 

위와 같은 순서로 진행하면 Classpath 환경 변수를 설정 할 수 있다.

 

 

-classpath 옵션

-classpath 옵션으로 클래스패스를 지정해 줄 수 있다. 컴파일 하기 위해 필요로 하는 .class 파일을 찾기 위해 컴파일 시,

 

파일 경로를 지정해주는 옵션이다. 

 

터미널 환경에서 'javac -help' 로 classpath 옵션과 관련된 내용을 볼 수 있다.

 

 

 

접근지시자

 

클래스를 설계할 때 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 메서드, 생성자 등을

 

설계하는 것이 바람직한데, 이러한 기능을 제공하는것이 접근지시자 이다.

 

접근 지시자의 종류로는 public, protected, default, private이 존재한다. 

 

 

 

접근 제한 적용 대상 접근할 수 없는 클래스
public 클래스, 필드, 생성자, 메서드 없음
protected 필드, 생성자, 메서드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스, 필드, 생성자, 메서드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메서드 모든 외부 클래스

 

 

클래스에 적용할 수 있는 접근 제한은 public과 default이며 다음과 같은 형식으로 작성한다.

 

// public 접근 제한
public class Person {

}

// default 접근 제한
class Person {

}

 

 

References

이것이 자바다(신용권 저)
TCP School
클래스패스