プログラミング Java

【Java】モジュールシステムの概要と実装例

投稿日:

概要

Javaのモジュールシステムについて、概念的なイメージと実際のコード例で理解を深めるための記事です。
読者はJava Silverの資格勉強中の方やJava入門者を想定しています。

内容は以下のようになっています。
・基本的なモジュール参照
・推移的なモジュール参照
・限定的なモジュール参照

環境
・Eclipse
・Java11

モジュールシステム概要

Java9から導入された仕組みです。
これによりパッケージ単位で公開/非公開を設定できるようになりました。

Java8以前まではパッケージ単位で設定できなかったので、publicなクラスにしてしまうとどのパッケージからでもアクセスできてしまうという課題がありました。
モジュールシステムが導入されたことで、特定のパッケージからのみアクセス可能にすることもできるようになり、パッケージ単位での情報隠蔽が実現されました。

全体像

本記事で解説するパッケージ構成の全体像です。

後続で個々のケースについて詳解していきますので、ここではまず4つのモジュールがあること、またそれぞれがどのモジュールを参照しようとしているかについてイメージを持っていてください。

基本的なモジュール参照


基本的なモジュール参照のケースです。
ここではmoduleAがexpパッケージを公開し、selfがmoduleAを参照しています。

moduleAの構成

  • module-info.java

  • Hello.java

selfの構成

  • module-info.java

  • Hello.java

  • SelfMain.java

  • ビルドパス
    moduleAをビルドパスに追加します。

実行結果

推移的なモジュール参照


推移的なモジュール参照のケースです。
ここではmoduleCがexp2パッケージを公開し、moduleAが参照時にtransitive指定することで、moduleAを参照するモジュールにもmodeulCが参照できるように宣言しています。
そのため、selfはmoduleAを参照することでmoduleCを利用することができるようになります。

moduleCの構成

  • module-info.java

  • Hello.java

moduleAの構成
変更なし

  • module-info.java

  • Hello.java
    変更なし

selfの構成
変更なし

  • module-info.java
    変更なし
  • Hello.java
    変更なし
  • SelfMain.java

  • ビルドパス
    moduleCをビルドパスに追加します。

実行結果

限定的なモジュール参照


限定的なモジュール参照のケースです。
ここではmoduleBがexp3パッケージをmoduleAに対してのみ公開しています。
そのため、moduleA以外(self)からはmoduleBを利用することができないようになっています。

moduleBの構成

  • module-info.java

  • Hello.java

moduleAの構成
変更なし

  • module-info.java

  • Hello.java
    変更なし

selfの構成
変更なし

  • module-info.java

  • Hello.java
    変更なし
  • SelfMain.java

  • ビルドパス
    moduleBをビルドパスに追加します。

実行結果

まとめ

  • モジュールシステムとは端的に言うと、パッケージ単位で情報隠蔽を実現する仕組みである。
  • 基本的なモジュール参照は、exportsでパッケージを公開し、requiresで参照先を指定する。
  • 推移的なモジュール参照は、requires transitive指定することで自身が参照する他のモジュールを自身を参照している他のモジュールにも公開することができる。
  • 限定的なモジュール参照は、指定したモジュールのみに対して公開することができる。

参考

本記事のモジュール構成は以下の記事を参考にさせて頂きました。
Javaのモジュールシステム入門

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

GitでIndexが壊れたときの直し方

これは自分の環境用の備忘録です。 (状況) Virtual BOX内のGit環境において、INDEXが0KBになっている。(INDEXが壊れている) (対処方法) リモート環境から新しくCloneして …

【Javaの始め方】環境構築から最初のコード作成まで

Javaを始めるにあたって必要な知識を必要最小限でお伝えします。 前提知識 Javaで開発するにはIDE(統合開発環境)が必要です。 そしてよく使われているIDEは以下の3つです。 名称無償/有償特徴 …

【Java入門】配列の扱い方まとめ

概要 配列の扱い方について学んでいきましょう。 配列は、同一の型の値を複数持つことができるデータ構造です。 ・int型の配列だったら、int(数値)を複数個持っている。 ・String型の配列だったら …

難しい,困難,頭を抱える

オブジェクト指向が難しいと思うならこれを読め!

オブジェクト指向はJava、JavaScript、PHP、Python、Rubyなどなど 色んな言語で使われているパラダイム(考え方)です。 上から順に追っていくだけ(手続き型)ではわからない仕組みに …

【SpringBoot入門】#8~ 検索機能の実装

概要 ・検索フォームから条件を指定して検索すると、条件に一致する結果が一覧画面に表示される。 ・検索条件は複合的に指定できることとする。 ・検索結果は適切にフォーマットされることとする。  (日付はy …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。