Javaの構造:標準仕様と実装
Javaを理解するためには、まずJavaが**標準仕様(Standard Specification)と実装(Implementation)**という二つの要素で構成されていることを知る必要があります。
Java標準仕様 (Java Standard Specification)
Java標準仕様は「Javaはこのように作られるべき」という設計図であり規則書です。建築で言えば建築基準法のような役割ですね。
この標準仕様は**JCP(Java Community Process)**を通じて管理されており、Javaがどんな機能を持つべきか、どう動作すべきかを定義しています。
Java実装 (Java Implementation)
標準仕様が設計図なら、実装は実際に動作するプログラムです。
複数の企業がJava標準仕様に合わせて実際のJavaプログラムを開発していますが、それぞれの実装には独自の長所があります:
- Oracle JDK: Oracleが提供する公式実装
- OpenJDK: オープンソースベースの実装
- Amazon Corretto: AWS環境に最適化された実装
- Azul Zulu: エンタープライズ環境に特化
重要なのは、これらがすべて同じ標準仕様に従っていることです。したがって、Oracle JDKで開発したプログラムをAmazon Correttoで実行しても問題なく動作します。
また、各社はWindows、macOS、Linuxなど様々なOSで動作するバージョンを提供しています。
Javaプログラムの実行プロセス
Javaプログラムはコンパイルと実行の二段階を経ます。
1. 開発者がJavaソースコードを作成 (.javaファイル)
↓
2. Javaコンパイラがソースコードをコンパイル
↓
3. バイトコードに変換 (.classファイル)
- JVMで高速実行できるよう最適化
- 文法エラーの検出
↓
4. JVM(Java Virtual Machine)でプログラム実行
バイトコードとは?
バイトコードは、人間が書いたJavaコード(.java)とコンピュータが直接実行する機械語の中間段階です。
この中間段階のおかげで、JavaはOSに依存せず実行できます。JVMさえあれば、同じバイトコードをWindowsでもLinuxでもどこでも実行できるのです。
IDEとJava: IntelliJの役割
実際の開発ではIDE(統合開発環境)を使用します。このシリーズではIntelliJ IDEAを使います。
IntelliJの便利な点:
- Java内部で簡単にインストール・管理が可能
- ソースコード作成時の自動補完、エラー表示などをサポート
- コンパイルと実行を一度に処理
IntelliJで実行ボタンを押すと:
- 自動的に
.javaファイルを.classファイルにコンパイル - コンパイルされたバイトコードをJVMで実行
開発者はこのプロセスをいちいち気にせず、コード作成だけに集中できます。
Javaの核心的な強み:OS独立性
Javaの最大の利点の一つは**「Write Once, Run Anywhere」**です。
なぜOS独立的なのか?
一般的なプログラミング言語は、OSごとに異なる方法でコンパイルする必要があります。Windows用、macOS用、Linux用にそれぞれビルドしなければなりません。
しかしJavaは違います:
Javaコード → バイトコード (OS独立)
↓
Windows JVM / macOS JVM / Linux JVM
(各OSに合わせて実行)
開発者は一度だけコードを書けばよく、OS互換性の問題はJVMが解決します。
実務での活用
実務ではこのようなシナリオが一般的です:
- 開発環境: WindowsやmacOSでOracle JDKで開発
- サーバー環境: LinuxでAmazon Correttoで運用
JavaのOS独立性のおかげで、開発したコードをそのままサーバーにデプロイできます。各環境に合ったJVMをインストールするだけです。
もしAWSを使うなら?
- 開発: WindowsでIntelliJ + Oracle JDKで開発
- デプロイ: AWS LinuxサーバーにAmazon Correttoをインストール
- 同じコードが問題なく実行される
まとめ
- Javaは標準仕様と実装で構成される
- 標準仕様はJCPが管理し、複数の企業がそれぞれ実装を提供
- Javaプログラムはコンパイル → バイトコード → JVM実行のプロセスを経る
- IDE(IntelliJ)はこのプロセスを自動化して開発者の利便性を提供
- OS独立性がJavaの核心的な強み
- 開発環境と運用環境で異なるJVMを使用できる
本投稿はインフラン キム・ヨンハンのJava講座を学習しながらまとめた内容です。
次回の投稿: 変数とデータ型 (予定)