Java 9のモジュールシステムとは?モジュール化がもたらす4つのメリットを解説
モジュール(module)とは、再利用を目的として設計されたパッケージの集合体です。各モジュールにはモジュール記述子(module descriptor)が含まれており、そこには以下の情報が記述されます。
- モジュール名
- モジュールの依存関係(依存する他のモジュールの名前)
- 外部に公開するパッケージ名(このモジュールに依存するモジュールのみが利用可能)
モジュールシステムの主なメリット
1. 強力なカプセル化
モジュールシステム最大の利点は強力なカプセル化です。従来のJavaでは「public」修飾子を付けたクラスやメンバーは誰からでもアクセスできましたが、モジュールシステムを導入することで、外部アプリケーションに公開するパッケージを限定できるようになります。
2. アプリケーションの軽量化とパフォーマンス向上
必要なモジュールだけを組み合わせてアプリケーションを構成できるため、アプリケーションが軽量化され、より多くのデバイスで実行可能になります。軽量化によって、アプリケーションのパフォーマンス向上も期待できます。
3. 関心事の分離(Separation of Concerns)の実現
モジュールアーキテクチャでは、アプリケーションを外部公開用のパッケージと非公開(隠蔽)パッケージに分割できます。これにより、関心事の分離の原則に従った、保守性の高い設計が容易になります。
4. セキュリティの向上
パッケージ内の一部の内部クラス、たとえば sun.security.* や com.sun.crypto.* などは、これらのパッケージが隠蔽されたことでアクセスできなくなりました。結果として、アプリケーション全体のセキュリティが向上します。
モジュール記述子(module-info.java)の書き方
モジュールは「module-info.java」という名前のファイル内で宣言します。このファイルがモジュール記述子となります。
module com.tutorialspoint.app {
// モジュール "com.tutorialspoint.app" が依存するモジュール
requires com.tutorialspoint.services;
// 他のモジュールから利用可能な、このモジュールが公開するパッケージ
exports com.tutorialspoint.app.util;
}
このように、requiresキーワードで依存モジュールを指定し、exportsキーワードで公開パッケージを明示することで、明確かつ安全なモジュール構成を実現できます。
-
Java 9におけるCompletableFuture APIの主な改善点を徹底解説
CompletableFuture APIは、Javaにおける非同期(asynchronous)プログラミングのための仕組みです。このAPIを使うことで、main()スレッドとは別のスレッド上でタスクを実行し、その進行状況・完了・失敗をmain()スレッドへ通知できるため、ノンブロッキングなコードを記述できます。 Java 9では、このCompletableFuture APIに対して以下の3つの改善が導入されました。 タイムアウトと遅延のサポート サブクラス化サポートの強化 新しいファクトリメソッドの追加 1. タイムアウトと遅延のサポート orTimeout() メソッド public
-
Java 9におけるtry-with-resourcesの改善点とは?
try-with-resourcesとはtry-with-resourcesはJava 7で導入された機能で、使用し終えたリソースを自動的にクローズ(解放)することを目的としています。ただし、従来の仕様には制限があり、リソースはtry文の前、またはtryブロック内で宣言されている必要がありました。この条件を満たさない場合、コンパイルエラーが発生します。Java 9ではtry-with-resourcesが改善され、tryブロック内でオブジェクトを新たに宣言する必要がなくなりました。これにより、事前に宣言済みの変数やfinal相当の変数をそのままtry-with-resourcesに渡せるように