0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[備忘録 その17] Java Silver ~モジュールシステム~

Last updated at Posted at 2024-08-15

モジュールシステム

コードをモジュールという単位で構成し、管理するための仕組みです。モジュールシステムは、大規模なアプリケーションの開発やライブラリの再利用を容易にし、依存関係の管理を強化することを目的としています。

1.モジュールシステムの基本概念

モジュール

モジュールは、クラスやパッケージをグループ化し、明確に定義された境界を持つ単位です。各モジュールは、他のモジュールに対して何を公開するか(エクスポートするか)を指定できるため、アクセス制御が可能です。
module-info.java
モジュールシステムの中心にあるのが、module-info.java というモジュール定義ファイルです。このファイルは、モジュールの名前、依存関係、およびエクスポートされるパッケージを定義します。module-info.java はモジュールのルートに配置されます。

2.module-info.javaの構造

module-info.javaの基本構造は次の通りです。

module com.example.module {
    // このモジュールが依存する他のモジュール
    requires java.base;
    requires com.example.othermodule;

    // このモジュールから外部に公開するパッケージ
    exports com.example.module.api;

    // 特定のモジュールに対してのみ公開するパッケージ
    exports com.example.module.internal to com.example.specificmodule;

    // サービスを提供するモジュール
    provides com.example.service.MyService with com.example.module.MyServiceImpl;

    // サービスを使用するモジュール
    uses com.example.service.MyService;
}

主なキーワード

  • module: モジュールの名前を定義します。

  • requires: このモジュールが依存する他のモジュールを指定します。requires transitiveを使うと、そのモジュールをいぞんするモジュールに再エクスポートします。

  • exports: モジュールの外部に公開するパッケージを指定します。これにより、他のモジュールがそのパッケージにアクセスできるようになります。

  • exports ... to: 特定のモジュールにのみパッケージを公開するために使用します。

  • provides ... with: サービスを提供するクラスを指定します。Javaのサービスプロバイダインタフェースを使う場合に使用します。

  • uses: サービスを使用することを宣言します。

3.モジュールシステムのメリット

依存関係の明確化

モジュールシステムにより、依存関係が明確に定義され、どのモジュールがどの機能に依存しているかが簡単に追跡できます。これにより、モジュール間の結合度を下げ、システム全体の構造がわかりやすくなります。

強化されたカプセル化

パッケージをモジュールごとにエクスポートすることで、不要な部分を隠蔽し、外部からの不正アクセスを防止します。これにより。内部実装が外部に影響を与えにくくなります。

依存性の解決とコンパイルの高速化

モジュールシステムを使用すると、コンパイル時に必要なモジュールだけをコンパイルすることができるため、ビルド時間が短縮されます。また、ランタイム時に不要なモジュールがロードされないため。メモリ消費を抑えることができます。

4.モジュールシステムの使用例

基本的なモジュール定義

次に示すのは、基本的なモジュール定義の例です。

モジュールA: module-info.java
module com.example.moduleA {
    requires java.sql;
    exports com.example.moduleA.api;
}

モジュールB: module-info.java
module com.example.moduleB {
    requires com.example.moduleA;
    exports com.example.moduleB.api;
}

この例では、moduleAはjava.sqlに依存しており、moduleBはmoduleAに依存しています。moduleAはcom.example.moduleA.apiパッケージを公開しており、moduleBはcom.example.moduleB.apiパッケージを公開しています。

最初のページ
[備忘録 その1] Java Silver ~Javaプログラミング基礎~

前のページ
[備忘録 その16] Java Silver ~例外~

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?