Backend/Java

Java - 패키지 (package/import/클래스패스/접근지시자)

가은파파 2021. 3. 5. 23:45

목표

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

학습할 것 (필수)

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

패키지(package)

- 서로 관련된 클래스의 묶음.(자바8 이후 약 4000개의 클래스)

- 클래스는 클래스파일, 패키지는 폴더. 하위 패키지는 하위 폴더로 .단위로 내려간다.

- 클래스의 실제 이름(full name)은 패키지를 포함.(java.lang.String)

- rt.jar는 클래스들을 압축한 파일(JDK설치 경로 jre\lib에 위치. but 자바9부터 모듈개념이 들어가면서 rt.jar이 없어짐.

(jar파일 압축파일로 ide에서 압축풀어서 볼 수 있음)

 

패키지의 선언

- 패키지는 소스파일의 첫번째 문장으로 단 한번 선언.

- 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다.

- 패키지 선언이 없으면 이름없는(unnamed) 패키지에 속하게 된다.

 


import 문

-클래스를 사용할 때 패키지이름을 생략할 수 있다.

-컴파일러에게 클래스가 속한 패키지를 알려준다.

//import 없다면
class ImportTest {
	java.util.Date today = new java.util.Date();
}

//import 적용
import java.util.Date;

class ImportTest{
	Date today = new Date();
}

-java.lang 패키지의 클래스는 import하지 않고도 사용할 수 있다. (많이 쓰이기 때문에 생략가능하게 함.)

 

import문의 선언

import 패키지명.클래스명;
//또는
import 패키지명.*;

-import문은 패키지문과 클래스선언의 사이에 선언한다.

-import문은 컴파일 시에 처리되므로 프로그램의 성능에 영향없음.(*을 사용해도 성능에는 영향없다.)

 

-이름이 같은 클래스가 속한 두 패키지를 import할 때는 클래스 앞에 패키지명을 붙여줘야 한다.

 

static import문

-static멤버를 사용할 때 클래스 이름을 생략할 수 있게 해준다.

import static java.lang.System.out;
import static java.lang.Math.*;

class Sample {
	public static void main(String[] args){
    	out.println(random());
        //System과 Math가 생략 가능하다.
    }
}

클래스 패스

자바가 클래스를 실행할 수 있게 하는 패스를 지정하는 것이다.

예를 들어 패키지를 실행할때 java파일을 실행할때 해당 자바 파일이 위치한 폴더로 이동해줘야 한다.

이러한 어려움을 해결해주는 것이 클래스 패스이다.

클래스 파일의 위치를 알려주는 경로이다.


classpath 환경변수

환경변수

: 운영체제에 지정하는 변수로 자바 가상머신과 같은 애플리케이션들을 환경변수의 값을 참고해서 동작하게 된다. classpath를 사용하는데 이 값을 지정하면 실행할 때마다 -classpath 옵션을 사용하지 않아도 되기 때문에 편리하다.

 

 

클래스 패스 설정 방법은 다음과 같다.

classpath(환경변수)에 패키지의 루트를 등록해줘야 함.

윈도울를 예를들어 classpath설정하는 방법

set classpath : 클래스패스 확인 가능

set classpath=C:\~~~~~ : 로 클래스패스를 커맨드에서 등록 가능.


-classpath 옵션

자바를 실행할 때 해당하는 클래스 파일 같은 폴더안에 없거나 다른 경로에 있어 지정이 필요한 경우, -class path 옵션을 사용한다.

 

;  경로를 구분해주는 구분자이다.

> java -classpath ".;lib" ClasspathDemo

//lib에 자바 실행에 필요한 컴파일 파일이 들어 있다.

> java -classpath "lib" ClasspathDemo

//lib이라는 폴더에 가서 자바를 실행하다.(필요한 컴파일 파일이 lib 폴더에 있어야 한다.)

그리고 자바는 기본적으로 -classpath "."을 디폴트로 지정해준다.

 

> java -classpath "." ClasspathDemo

> java ClasspathDemo

 

동일하다.


접근지시자

。접근제어 지시자의 관계

지시자 

클래스 내부 

동일 패키지 

상속받은 클래스

이외의 영역 

private 

 ● 

X

X

X

default

● 

X

X

protected

● 

● 

X

public

● 

● 

● 

 

private : 클래스 내부(메소드)에서만 접근을 허용한다.

default : 클래스 내부와 동일 패키지에서만 접근을 허용한다.

protected : 클래스 내부와 동일패키지 상속받은 클래스에서만 접근을 허용한다.

public : 어디서든 접근 가능(접근을 제한하지 않는다.)

 

접근지시자 샘플코드

캡슐화와 접근 지시자

- 접근 지시자를 사용하는 이유

   : 외부로부터 데이터를 보호하기 위해서, 아래와 같은 상황을 방지하기 위해서 이다.

   : 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서.

public class Time{
	//private로 변경해야 외부접근을 막는다.
  public int hour; 
  public int minute;
  public int second;
}

//외부에서
Time t = new Time();
t.hour = 25;

아래와 같은 방식으로 캡슐화하여 메서드로 간접접근을 하게 한다.

캡슐화

private를 사용할 경우 만약에 변경사항이 있는 경우 사용한 클래스 내부만 테스트해보면 되어서 유용하다. 

 

출처

  • 자바의정석
  • 생활코딩