본문 바로가기
언어 공부/Java

[Java] Java의 패키지

by 희조당 2022. 9. 5.
728x90

✍️ 학습할 것

  • 패키지 (Package)
  • import
  • 클래스패스
  • CLASSPATH 환경변수
  • -classpath 옵션
  • 접근지시자

📌 패키지 (Package)

패키지란? 클래스와 인터페이스의 집합이다.

자바는 패키지로 관련된 클래스나 인터페이스를 분류해 효율적으로 파일들을 관리한다. 

패키지만 다르다면 같은 이름의 클래스가 존재할 수 있어 협업에서 발생하는 이름 충돌 문제를 해결할 수 있다.

추가적인 특징은 다음과 같다.

  • 모든 클래스는 반드시 하나의 패키지에 속한다.
  • 패키지 선언은 소스파일 첫 번째 문장에 단 한 번만 가능하다.

✔️ 이름 없는 패키지

  • 패키지가 지정되지 않은 파일들을 포함하는 패키지이다.
  • 앞서 말했듯이 모든 패키지는 반드시 하나의 패키지에 속해야 한다. 만약 패키지를 지정하지 않고 소스파일을 작성하면 이름 없는 패키지에 포함된다.

✔️ java.lang

  • 자바프로그래밍에서 가장 기본이 되는 클래스를 포함하는 패키지이다.
  • 모든 소스파일에 묵시적으로 선언되어 있어 import 없이 사용할 수 있다.

📌 import

import란? 컴파일러에 사용할 패키지에 대한 정보를 미리 제공하는 키워드이다.

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

코드가 길어지는 번거로움을 import 키워드로 해결할 수 있다.

 

✔️ import 선언

   import 패키지명.클래스명;
   import 패키지명.*;
  •  *  을 이용하면 패키지의 모든 클래스를 동시에 import 할 수 있다. 하지만 하위 패키지의 클래스까지 포함하지 않는다.

📌 클래스패스

클래스패스란? 클래스를 찾기 위한 경로이다. 

실행과정에서 바이트 코드로 변환된 *.class 파일에 포함된 명령을 실행하기 위해서 파일을 우선 찾아야한다.

이 때 사용하는 것이 클래스패스이고 여기에 *.class 파일이 포함된 디렉토리와 파일들이 콜론(:)으로 구분되어 있다.

클래스패스 지정 방법은 두 가지가 있다.

  • CLASSPATH 환경변수 사용하기
  • java runtime에 -classpath 옵션 사용하기

📌 CLASSPATH 환경변수

클래스패스를 지정하는 첫번째 방법. 컴퓨터 시스템 변수 설정로 지정하는 방법이다.

JVM이 시작될 때 실행되는 JVM의 클래스 로더는 환경변수에 설정되어 있는 디렉토리의 클래스들을 먼저 로드한다.

따라서 CLASSPATH 환경변수에는 필수 클래스들이 위치한 디렉토리를 등록하는게 좋다.


📌 -classpath 옵션

클래스패스를 지정하는 두번째 방법. 명령어로 지정하는 방법이다.

java 명령어는 javac 명령어로 만들어진 *.class 파일을 실행하는 명령어이다.

이 옵션을 붙이면 컴파일러가 필요한 클래스 파일을 찾을 수 있게 파일 경로를 지정해줄 수 있다.

// Example
java -classpath <C:\디렉토리 위치, jar파일, zip파일> <C:소스파일.java>

📌 접근지시자

Java의 클래스 편에서 정리한 접근지정자(=접근지시자=접근제어자)이다. 

캡슐화에 관련된 내용만 추가적으로 가볍게 이야기하겠다.

 

✔️ 캡슐화 (Encapsulation)

객체지향 프로그래밍이 중요한 이유는 요구사항이 추가되고 바뀌어도 변경사항이 전파되지 않도록 막을 수 있기 때문에 생산성, 유지보수 등 다양한 면에서 강력하기 때문이다. 이 점을 가능케 해주는 도구 중 하나가 캡슐화이다.

캡슐화는 보통 객체의 변수와 메소드를 묶는 작업을 말한다. 전혀 와닿지 않는 정의이다.

내가 생각하는 캡슐화란 객체의 데이터와 데이터를 처리하는 메소드를 묶고 외부에는 모르게 하는 것이다.

너무 길어질 것 같아서 나중에 다루겠다!

 

'언어 공부 > Java' 카테고리의 다른 글

[Java] Java 예외 처리  (2) 2022.09.20
[Java] Java 인터페이스  (0) 2022.09.08
[Java] Java의 상속  (2) 2022.08.25
[Java] Java의 클래스  (0) 2022.08.17
[Java] Java 제어문  (0) 2022.08.16

댓글