본문 바로가기

Java

[WS live-study] 7주차: 패키지

 

패키지 키워드

패키지란? 

  • 성격에 맞는 클래스와 인터페이스들을 조직화한 네임스페이스
  • 쉽게 말해서 우리의 컴퓨터에 있는 파일들을 공통된 특성에 따라 분류해놓은 폴더의 역할이 java에서 패키지이다.
  • 한 프로그램에 JAVA 언어로 작성된 파일들이 수백, 수천개가 됐을 때 파일 성격에 알맞게 분류해 놓은 패키지의 역할은 중요하다.
  • JAVA는 또한 패키지 묶음으로 자바 프로그래밍에 유용한 많은 class 라이브러리(api)를 제공한다. (예- java.util.String, java.io.File, java.net.Socket... 등) 
  • 디렉토리 안에 디렉토리를 가질 수 있는 것처럼 패키지도 마찬가지다. 특정 패키지에서 하위 패키지를 가리킬 때 점(.)으로 구분한다.

패키지 선언

패키지 선언은 다음과 같다.

 

package dev.olivejua.study.week7;

public class ClassA {
	...
}

 

클래스 바로 윗줄의 예와 같이 package '패키지명' 이 된다. 파일에도 파일 경로가 있어야 찾듯이 모든 클래스는 패키지+클래스여야 컴파일러가 구분할 수 있다.

import 키워드

import는 다른 패키지에 있는 클래스, 인터페이스 또는 static 멤버를 사용할 때 참조할 때 사용하는 키워드이다.

 

import 키워드 없이 해당 클래스를 가리키려면 다음과 같이 사용해야 한다.

public class ClassA {
    java.util.List list = new java.util.ArrayList<String>();
}

하지만 매번 이렇게 작성하기에 너무 길어서 일일이 작성하기에 불편하고, 가독성도 떨어진다.

그럴 때 다음과 같이 import 키워드를 이용하면 해당 파일 안에서는 위의 예처럼 패키지명 없이 바로 가리켜 사용할 수 있다.

import java.util.ArrayList;
import java.util.List;

public class ClassA {
    List list = new ArrayList<String>();
}

그런데 위의 예를 보다보니 List와 ArrayList 타입이 java.util이라는 같은 패키지에 있는 것이다. 이럴 경우에 다음의 예와 같이 사용할 수 있다.

import java.util.*;

public class ClassA {
    List list = new ArrayList<String>();
}

이렇게 여러 클래스를 지정하여 사용할 경우 패지지명.*; 를 선언하면 java.util 안에 있는 모든 클래스, 인터페이스를 import할 수 있다.

클래스패스

클래스패스란?

  • 클래스를 찾기 위한 경로
  • JVM이 프로그램을 실행했을 때 클래스 파일을 찾는데 기준이 되는 파일 경로
  • 자바 컴파일러가 바이트코드(.class)로 변환하고, java runtime이 이 파일을 실행하려면 먼저 이 파일을 찾아야한다. 이때 classpath에 지정된 경로를 사용한다.

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

1. 환경변수 CLASSPATH를 사용

환경변수 이름을 CLASSPATH로 하여 경로 목록을 나열하면 JVM이 실행시 이 경로를 모두 검색하여 .class 파일을 로드한다.

2. java runtime에 -classpath 플래그를 사용

실행시마다 -classpath 옵션을 지정하여 경로를 직접 명시해주는 방법이다. 이 방법으로하면 실행할 때마다 매번 지정해줘야하는 번거로움이 있다.

접근지시자

객체지향에서 사용자가 굳이 알 필요없는 정보를 보호하기 위한 것이다.

 

접근허용은 private < default < protected < public 순으로 많은 접근을 허용한다.

private 해당 클래스에서만 접근 가능
default (접근제어자 별도 설정 X) 해당 패키지 내에서만 접근 가능
protected 동일 패키지 내에서 접근가능, 외부 패키지는 자식 클래스만 접근 가능
public 모든 클래스 접근 가능

 

 


정리하는데 도움을 준 참고자료들

 

'Java' 카테고리의 다른 글

equals와 hashcode는 왜쓰는거지?  (0) 2021.05.25
[WS live-study] 8주차: 인터페이스  (0) 2021.02.13
[WS live-study] 6주차: 상속  (0) 2021.02.04
[WS live-study] 5주차: 클래스  (0) 2021.02.03
[WS live-study] 4주차: 제어문  (0) 2021.02.02