[자바/Java] 패키지(package) 란?

resilient

·

2021. 1. 5. 01:05

728x90
반응형

github.com/whiteship/live-study/issues/7

 

7주차 과제: 패키지 · Issue #7 · whiteship/live-study

목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 마감일시 2021년 1월 2일 토요일 오후 1시까지.

github.com

목표

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

학습할 것 (필수)

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

마감일시

2021년 1월 2일 토요일 오후 1시까지.


# 패키지 키워드

 

패키지란 클래스의 묶음이다. 패키지에는 클래스, 인터페이스를 포함시킬 수 있다. 서로 관련된 클래스들끼리 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 

같은 이름의 클래스라도 서로 다른 패키지에 존재할 수 있다.

원래 클래스의 실제 이름은 패키 지명을 포함한 것이다. 예를 들어 String클래스의 실제 이름은 java.lang.String이다. java.lang라는 패키지에 포함된 String이라는 클래스인 것이다.

클래스가 물리적으로 하나의 클래스 파일인 것처럼, 패키지는 물리적으로 하나의 디렉토리이다.

  • 패키지 이름을 java로 시작하면 안 된다.
  • 패키지 이름과 위치한 폴더의 이름이 같아야 한다.
  • 하나의 소스 파일에는 첫 번째 문장으로 단 한번의 패키지 선언만을 허용한다.
  • 모든 클래스는 반드시 하나의 패키지에 속해야한다.
  • 패키지는 . 을 구분자로 하여 계층구조로 구성할 수 있다.
package 패키지명;  # 패키지 선언방법

정의된 클래스이름과 패키지 이름을 합쳐야 완전한 클래스를 나타낸다고 할 수있다.

FQCN(Fully Qualified Class Name) 이라고 한다.

 

빌트인 패키지

 

자바에서는 많은 패키지와 클래스를 제공하는데

가장 많이 쓰이는 패키지로는 java.lang 과  java.util 이 있다.

 

#import 키워드

 

소스 코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야 한다. 하지만, 클래스의 코드를 작성하기 전, import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면, 코드에 사용되는 클래스 이름에서 패키지명은 생략가능하다.

이클립스에서는 ctrl + shift + o 를 누르면, 자동으로 import문을 추가해주는 기능을 제공한다.

import 패키지명.클래스명;

import 패키지명.*;  *는 같은 패키지에서 여러개의 클래스가 사용될 때, import를 여러 번 사용하는 대신 사용할 수 있게 한다.

클래스의 이름 대신 무조건 * 을 사용할 수 있는 것이 아니고, 한 패키지에서 여러 클래스를 사용하는 경우에 사용할 수 있다.

import static 의 경우, static멤버를 호출할 때 클래스 이름을 생략할 수 있게 해준다.

 

#CLASS PATH 클래스 패스

 

클래스 패스는 JVM 이나 Java 컴파일러가 사용하는, 클래스나 패키지를 찾을 때 기준이 되는, 말그대로 경로 이다.

클래스 하나는 하나의 클래스 파일이 된다. 

 

javac (class)-> 소스코드를 컴파일해서 클래스로 만든다. 

 

#CLASSPATH 환경변수

 

이클립스를 처음 깔고, Java IDE를 사용하기전에 JVM이 시작될 때 자바 컴파일을 위한 javac와 관련된 경로 설정을 해줬던 걸로 기억이 난다.

내 컴퓨터 속성 - 고급 시스템설정 - 환경변수 - 시스템 변수를 보면 Path에 값이 설정되어있는데 javac 파일이 있는 경로를 설정해 줬었다. 

CLASSPATH 환경 변수는 필수 클래스들이 있는 폴더경로를 등록해주면 된다.

 

 

#-classpath 옵션

 

컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일들을 찾기 위해 파일경로를 지정해주는 옵션이다.

예를 들어

HelloWorld.java 파일이 C:Java 디렉토리에 존재하고
필요한 클래스 파일들이 C:JavaClass 에 위치한다면
javac -classpath C:JavaClass C:HelloWorld.java 이렇게 해주면 경로가 지정된다.

이 외에도 -d , -g 등등 많은  java옵션들이 존재한다.

 

#접근 제어자(접근 지시자)

 

접근 제어자는 멤버 또는 클래스에 사용되고, 외부에서 접근하지 못하도록 제한하는 역할을 한다.

클래스나 멤버변수, 메소드, 생성자에 접근 제어자가 지정되어있지 않으면, default 임을 뜻한다.

 

접근 제어자를 사용하는 이유

  • 외부로부터 데이터를 보호하기 위함
  • 외부에서는 불필요하고 내부적으로 필요한 부분을 감추기 위함

클래스,멤버변수,메소드,생성자 앞에 붙어서 사용될 수 있고,

  • private - 같은 클래스 내에서만 접근이 가능하다.
  • default - 같은 패키지 내에서 접근이 가능하다.
  • protected - 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능하다.
  • public - 접근 제한이 없다. 어디서든 가능하다.

 

 

 

 

 

 

 

 

 

#Reference

  • effectivesquid.tistory.com/entry/%EC%9E%90%EB%B0%94-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%8C%A8%EC%8A%A4classpath%EB%9E%80
  • payoff.tistory.com/401
  • blog.baesangwoo.dev/posts/java-livestudy-7week/
  • 자바의 정석 (저자.남궁성)
반응형