자바 9 모듈

Java 9 모듈은 Java의 구조에서 가장 큰 변화 중 하나입니다. 여기에서는 “Java 9 모듈 시스템”에 대한 간략한 고수준 소개를 제공하려고 합니다. 우리는 다음과 같은 주제들을 Java 9 모듈 시스템에 대해 살펴볼 것입니다.

Java 9 모듈

우리는 다음과 같은 주제들을 Java 9 모듈 시스템에 대해 살펴볼 것입니다.

  1. 소개
  2. Java SE 9: Jigsaw 프로젝트
  3. 현재 Java 시스템의 문제점?
  4. Java SE 9 모듈 시스템의 장점
  5. JDK 8과 JDK 9 비교
  6. Java 9 모듈이란 무엇인가?
  7. Java 9 모듈 시스템의 주요 특징
  8. Java 8과 Java 9 애플리케이션 비교

소개

Oracle 사는 Java 9의 출시를 2017년 3월에서 2017년 9월로 연기했습니다. 우리는 알다시피 Java SE 8은 세 가지 큰 새로운 기능(그 외에도 몇 가지 개선과 새로운 기능이 있음)과 함께 출시되었습니다.

  1. 람다 표현식
  2. 스트림 API
  3. 날짜 API

마찬가지로, Java SE 9는 세 가지 큰 기능(그 외에도 몇 가지 개선과 새로운 기능)과 함께 출시됩니다.

  1. Java 모듈 시스템 (Jigsaw 프로젝트)
  2. 자바 REPL
  3. 밀링 프로젝트 동전

이 게시물에서는 Oracle Jigsaw 프로젝트의 기본 사항에 대해 설명합니다.

자바 SE 9: Jigsaw 프로젝트

Jigsaw 프로젝트는 자바 SE 9에서 완전히 새로운 개념인 자바 모듈 시스템을 소개할 예정입니다. 이는 Oracle Corp의 자바 SE 9 릴리스에서 매우 크고 훌륭한 프로젝트입니다. 처음에는 자바 SE 7 릴리스의 일부로 이 프로젝트를 시작했지만, 막대한 변화로 인해 자바 SE 8로 연기되었으며 다시 연기되었습니다. 이제 2017년 9월 자바 SE 9와 함께 출시될 예정입니다. Jigsaw 프로젝트의 주요 목표:

  • 모듈식 JDK
    현재 JDK 시스템이 너무 큽니다. 그래서 JDK 자체를 작은 모듈로 나누어 여러 가지 이점을 얻기로 결정했습니다 (곧 다가올 섹션에서 자세히 설명하겠습니다).- 모듈식 소스 코드
    현재 소스 코드 JAR 파일은 너무 큽니다. 특히 rt.jar가 매우 큽니다. 그래서 Java 소스 코드를 작은 모듈로 나눌 예정입니다.- 모듈식 런타임 이미지
    이 기능의 주요 목표는 “JDK 및 JRE 런타임 이미지를 모듈을 수용하도록 재구성하는 것”입니다.- 대부분의 내부 API 캡슐화
    이 기능의 주요 목표는 “JDK의 대부분의 내부 API를 기본적으로 액세스할 수 없게 만들지만, 일부 중요하고 널리 사용되는 내부 API는 액세스할 수 있게 남겨둘 것”입니다.- Java Platform Module System
    이 기능의 주요 목표는 “사용자가 애플리케이션을 개발하기 위해 자신의 모듈을 생성할 수 있도록 하는 것”입니다.- jlink: Java 링커
    이 jlink 도구의 주요 목표는 “사용자가 자신의 애플리케이션에 대한 실행 파일을 생성할 수 있게 하는 것”입니다.

이러한 개념을 명확하게 이해하지 못하더라도 걱정하지 마세요. 다음 섹션과 저의 포스트에서 유용한 예제와 함께 이러한 개념을 깊이 있게 설명하겠습니다.

현재 Java 시스템의 문제점?

이 섹션에서는 “Java SE 9 모듈 시스템이 필요한 이유”라는 주제를 다룰 것입니다. 이는 현재 Java 시스템의 문제점을 의미합니다. Java SE 8 이전 시스템은 Java 기반 애플리케이션을 개발하거나 제공하는 과정에서 다음과 같은 문제점이 있습니다.

  • JDK가 너무 크기 때문에 작은 장치에 축소하기가 약간 어렵습니다. Java SE 8에서는 이 문제를 해결하기 위해 compact1, compact2, compact3의 3 가지 유형의 compact 프로파일을 도입했습니다. 그러나 이 문제를 해결하지 못했습니다.
  • rt.jar 등과 같은 JAR 파일은 작은 장치 및 애플리케이션에서 사용하기에 너무 큽니다.
  • JDK가 너무 크기 때문에 애플리케이션이나 장치는 더 나은 성능을 지원할 수 없습니다.
  • 현재의 Java 시스템에는 강력한 캡슐화가 없습니다. “public” 접근 지정자가 너무 개방적이기 때문에 누구나 접근할 수 있습니다.
  • JDK와 JRE가 너무 크기 때문에 애플리케이션을 테스트하고 유지 관리하기 어렵습니다.
  • public이 너무 개방적이기 때문에, sun.*, *.internal.* 등과 같은 일부 내부 비중요 API에 액세스할 수 없습니다.
  • 사용자가 내부 API에도 액세스할 수 있기 때문에 보안이 큰 문제입니다.
  • 애플리케이션이 너무 큽니다.
  • 구성 요소 간의 결합을 지원하기가 약간 어렵습니다.

모든 이러한 문제를 해결하기 위해 Oracle Corp는 Java SE 9 릴리스에서 Java 모듈 시스템을 출시할 예정입니다.

Java SE 9 모듈 시스템의 장점

Java SE 9 모듈 시스템은 다음과 같은 이점을 제공합니다.

  • Java SE 9는 JDK, JRE, JAR 등을 작은 모듈로 나누기 때문에 필요한 모듈만 사용할 수 있습니다. 그래서 Java 애플리케이션을 작은 장치에 맞추는 것이 매우 쉽습니다.
  • 테스트와 유지보수가 쉬워집니다.
  • 더 나은 성능을 지원합니다.
  • public은 그저 public이 아니라 아주 강력한 캡슐화를 지원합니다. (큰 개념이므로 곧 유용한 예제와 함께 살펴볼 것입니다).
  • 더 이상 내부 비중요 API에 액세스할 수 없습니다.
  • 모듈은 원치 않는 내부 세부 정보를 안전하게 숨길 수 있으므로 더 나은 보안을 제공합니다.
  • 원하는 모듈만 사용하기 때문에 애플리케이션이 매우 작습니다.
  • 구성 요소 간의 결합을 줄이기 쉽습니다.
  • 단일 책임 원칙(SRP)을 지원하기 쉽습니다.

이러한 개념을 하나씩 자세히 살펴볼 것입니다.

JDK 8과 JDK 9 비교

우리는 JDK 소프트웨어가 무엇을 포함하는지 알고 있습니다. JDK 8 소프트웨어를 설치한 후, Java Home 폴더에 bin, jre, lib 등의 몇 개의 디렉토리가 있음을 볼 수 있습니다. 그러나 오라클은 이 폴더 구조를 다음과 같이 약간 다르게 변경했습니다. JDK 8 폴더 구조: JDK 9 폴더 구조: 여기서 JDK 9에는 JRE가 포함되어 있지 않습니다. JDK 9에서 JRE는 별도의 배포 폴더로 분리되었습니다. JDK 9 소프트웨어에는 “jmods”라는 새로운 폴더가 있습니다. 이 폴더에는 아래에 표시된 Java 9 모듈 세트가 포함되어 있습니다. JDK 9에서는 rt.jar와 tools.jar가 없습니다. 참고:- 현재 “jmods”에는 95개의 모듈이 포함되어 있습니다. 최종 릴리스에서 증가할 수 있습니다. “jmods” 폴더는 ${JAVA_HOME}/jmods에 있습니다. 이들은 JDK 모듈로 알려져 있습니다.

Java 9 모듈이란 무엇인가요?

A Module is a self-describing collection of Code, Data, and some Resources. It is a set of related Packages, Types (classes, abstract classes, interfaces etc) with Code & Data and Resources. Each Module contains only a set of related code and data to support Single Responsibility (Functionality) Principle (SRP). The main goal of Java 9 Module System is to support Modular Programming in Java. We will discuss on “What is a Module Descriptor” and “How to develop Java Modules” in my coming posts.

Java 9 모듈 시스템의 시작

지금으로서, Java 9 모듈 시스템은 Early Access JDK에서 95개의 모듈을 가지고 있습니다. Oracle Corp는 JDK jar 파일과 Java SE 사양을 두 개의 모듈 세트로 분리했습니다.

  • 모든 JDK 모듈은 “jdk.*”로 시작합니다.
  • 모든 Java SE 사양 모듈은 “java.*”로 시작합니다.

Java 9 모듈 시스템에는 “java.base” 모듈이 있습니다. 이것은 베이스 모듈로 알려져 있습니다. 이 모듈은 독립 모듈이며 다른 모듈에 의존하지 않습니다. 기본적으로 다른 모든 모듈은 이 모듈에 의존합니다. 그래서 “java.base” 모듈은 Java 9 모듈의 어머니로 알려져 있습니다. 이것은 모든 JDK 모듈과 사용자 정의 모듈의 기본 모듈입니다.

Java 8과 Java 9 응용 프로그램 비교

우리는 이미 Java 5, 6, 7 또는 8을 사용하여 많은 Java 애플리케이션을 개발했습니다. 우리는 Java 8 이전의 애플리케이션이 어떻게 보이고 무엇을 포함하고 있는지 알고 있습니다. 간단히 말하자면, 다음과 같이 Java 8 애플리케이션을 다이어그램으로 표현했습니다: Java 8 또는 이전의 애플리케이션에서는 최상위 구성 요소로 패키지가 있습니다. 패키지는 관련된 타입의 집합을 그룹화하는 데 사용됩니다. 또한 리소스의 집합을 포함합니다. Java 9 애플리케이션은 이와 크게 다르지 않습니다. 그저 “모듈”이라는 새로운 구성 요소를 도입했을 뿐입니다. 이는 관련된 패키지의 집합을 그룹화하는 데 사용됩니다. 그리고 모듈 디스크립터(“module-info.java”)라는 또 다른 새로운 구성 요소가 추가되었습니다. 그게 다입니다. 애플리케이션의 나머지 부분은 이전 버전의 애플리케이션과 동일합니다. 다음과 같이 표시됩니다: Java 8 애플리케이션에 패키지가 최상위 구성 요소로 있는 것처럼, Java 9 애플리케이션에는 모듈이 최상위 구성 요소로 있습니다. 참고: 각 Java 9 모듈은 하나의 모듈과 하나의 모듈 디스크립터만을 가지고 있습니다. Java 8 패키지와 달리, 하나의 모듈에 여러 모듈을 만들 수는 없습니다. 간단히 말하면 Java 9 모듈은 다음과 같은 주요 구성 요소를 포함합니다:

  • 하나의 모듈
  • 모듈 이름
  • 모듈 디스크립터
  • 일련의 패키지
  • 일련의 타입 및 리소스

여기에는 module-info.java (모듈 디스크립터) 또는 다른 속성 또는 XML이 포함될 수 있습니다. 이 글에서는 이론을 너무 많이 다뤄왔습니다. 자바 9 모듈 시스템의 기본 사항을 이해하는 데 충분합니다. 다음 글에서는 몇 가지 기본 모듈 개발을 시작하겠습니다. 필요할 때마다 추가적인 이론 개념이나 자바 9 모듈 시스템 용어에 대해 논의할 것입니다. 이것이 “자바 9 모듈 시스템 소개”에 대한 모든 내용입니다. 다음 글에서는 자바 SE 9 모듈 시스템에 대해 더 많은 개념을 논의할 것입니다. 내 튜토리얼을 읽어 주셔서 감사합니다. 자바 SE 9 학습을 즐기세요! 참고: 프로젝트 Jigsaw

Source:
https://www.digitalocean.com/community/tutorials/java-9-modules