다라다라V
article thumbnail
728x90
반응형

 

 개발자 별로 코드를 작성하다보면 클래스 이름이 같아질 수 있습니다. 이러한 코드를 합쳐 사용하기 위해서는 다른 개발자 코드의 클래스 이름을 바꿔야합니다. 자바에서는 이를 보완하기 위해 패키지(package)라는 개념을 도입되었습니다.

서로 관련있는 코드를 묶어서 관리하는 패키지와 JDK9 업데이트 이후 사용되는 모듈에 대해서 배우도록 하겠습니다. 패키지 선언 방식도 배워보도록 하겠습니다. 07-2 포스트에서는 자바에서 자주 사용되는 패키지들의 사례들을 보도록 하겠습니다.

📌 자바 패키지

📚 패키지의 개념 및 필요성

  • 서로 관련된 코드(클래스나 인터페이스) 파일을 묶은 것
  • 클래스 이름 앞에 패키지 이름을 붙여 같은 이름의 클래스 파일 사용 가능
  • 클래스를 기능별로 묶어 놓아 관리 또는 접근을 용이하게 함

 

각 개발자 별로 코드를 작성하다보면 같은 이름의 class를 선언할 수도 있습니다. 이러한 경우 각 클래스를 구분하기 위해 package가 필요합니다.


📚 자바 패키지

자바 패키지는 서로 관련된 클래스와 인터페이스를 컴파일한 파일로 묶어놓은 디렉터리라고 생각하면 좋습니다.

  • 패키지는 계층적으로 구성
  • 각 계층을 도트 ( . ) 로 구분하여 관련된 클래스 관리를 용이하게 함
  • 클래스 경로명 패키지 이름과 클래스 이름으로 구성
  • 패키지별 접근 제한 가능
  • 서로 다른 패키지에 동일한 이름의 클래스 생성 가능


📚 자바 표준 패키지

  • 자바 프로그램을 개발할 때 사용할 수 있는 클래스와 인터페이스의 모음
  • 같은 경로 상에 위치
  • 자바 표준 패키지는 자바 개발 환경의 일부
  • JDK9 이후는 jmods에 모듈로 분할되어 제공 (JDK9 이전에는 jar)

📌 자바 모듈

📚 자바의 모듈(module)

  • 여러 패키지와 이미지 등의 자원을 모아놓은 컨테이너
  • JDK9 이후 부터 자바의 API의 모든 클래스들을 패키지 기반에서 모듈 기반으로 바꿔둠
  • 응용 프로그램 역시 여러 개의 모듈로 분할 가능
  • 클래스가 모여 패키지, 패키지가 모여 모듈을 구성

📚 모듈의 개념

 

  • JDK 9 이전에는 모든 패키지들이 하나의 파일로 제공
    => 일부분만 필요해도 모두 메모리에 담아야해서 메모리 낭비가 심했음
  • JDK 9 업데이트로 각 패키지들을 연관된 것들로 모듈로 묶어 필요한 것만 사용
  • 메모리가 부족한 임베디드 환경에 최적화된 자바의 특징

📚 자바 API의 모듈 파일과 클래스들

  • 자바 설치 경로의 jmods 디렉터리 모듈 파일(.jmod)가 존재
  • 모듈 파일에는 자바 API 패키지들이 들어있음
  • 이 파일의 경로들이 도트( . )를 통해 표현될 수 있는 것

📚 자바 버전별 실행 환경 비교

  • 자바 실행 환경(run time environment)은 자바 응용프로그램이 실행되는데 필요한 제반 환경
  • 자바 API 클래스 자바 가상 기계(JVM)으로 구성

  • JAVA 9 이전에는 자바 API의 모든 클래스들은 rt.jar이라는 하나의 단일체로 구성
  • JVM은 필요한 클래스 파일을 rt.jar 전체를 설치해서 로딩하고 실행

  • JAVA 9 이후자바 API를 많은 수의 모듈로 분할
  • 컴파일시 필요한 모듈만 조립하여 구성
  • 필요한 모듈만을 묶어 modules 파일을 만들 수도 있음 (커스텀 JRE)

📚 주요 패키지들

 자바 설치시 자바 개발 도구인 JDK(Java Develope Kit)가 설치되면서 이곳에는 개발자가 사용하는 많은 클래스들이 패키지에 담기고, 다시 모듈에 담겨 제공됩니다. 이렇게 자바에서 제공되는 기본 클래스들을 자바 API라고 합니다. JDK의 표준 패키지는 모듈로 나누어져 JDK를 설치한 디렉토리 밑의 jmods 디렉터리에 담겨 있습니다.

 

📃 java.base 모듈

  • java.lang : 문자열, 수학, 표준 입출력 등의 기본적인 클래스와 인터페이스 제공 / import 불필요
  • java.util : 날짜, 시간, 벡터, 해시맵 등의 일반 유틸리티 제공
  • java.io : 입출력 지원

 

📃 java.desktop 모듈

  • java.awt : 기본적인 GUI
  • java.swing : 추가적인 GUI

자바 API에 대한 공식 문서는 다음의 주소를 참고하세요.

https://docs.oracle.com/en/java/javase/11/

 

JDK 11 Documentation - Home

The documentation for JDK 11 includes developer guides, API documentation, and release notes.

docs.oracle.com


📌 패키지 구성과 사용

📚 패키지에 포함된 클래스의 사용 방법

📃 필요시 패키지명을 포함한 클래스 이름 사용

java.util.Scanner s;
s = new java.util.Scanner(System.in);
  • 자바 응용프로그램에서 다른 패키지의 클래스를 사용하고자하면 패키지명을 포함하는 경로가 필요
  • java.util이라는 경로를 통해 Scanner 클래스에 접근

 

📃 소스 맨 앞에  import 선언문을 사용

import java.util.Scanner;

Scanner s;
s = new Scanner(System.in);
  • import 문을 사용하면 이후 패키지 경로를 생략하고 클래스 이름만으로 조작 가능
  • import 패키지.클래스; 형식으로 선언

📚 import 문을 이용한 자바 패키지 사용

📃 import <패키지경로.클래스명>

  • 지정된 패키지 경로에 포함되어 있는 클래스 중 명시된 클래스만 가져옴
  • [ctrl] + [shift] + O 로 빠르게 import 문을 작성할 수 있음
import java.util.Scanner;

 

📃 import <패키지경로.*>

  • 지정된 패키지 경로에 포함된 모든 클래스들을 가져옴
  • 하위 패키지는 가져오지 않음에 주의
import java.util.*;

📚 패키지 선언

  • 주석을 제외한 소스 코드 맨 앞에 선언
  • 패키지 명은 계층적으로 구성되어 있으며 .으로 구분
package <패키지명>;

📚 디폴트 패키지 (default package)

  • package 선언문이 없는 소스
  • 현대 디렉터리에 위치함

 

 

 

반응형

'코딩언어 > JAVA' 카테고리의 다른 글

[JAVA] 08. 배열  (0) 2022.10.22
[JAVA] 07-2 자바 기본 API  (0) 2022.10.20
[JAVA] 06. 캡슐화와 정보 은닉  (2) 2022.10.14
[JAVA] 05. 클래스의 멤버  (0) 2022.10.13
[JAVA] 04. 클래스와 객체  (0) 2022.10.12
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!