はじめに
Javaを学んでいると、「enum(列挙型)」と「switch文」の組み合わせがよく出てきます。
でも、なぜわざわざこの2つをセットで使うのでしょうか?
この記事では、Javaの switch 文と enum の相性が抜群に良い理由を、図・コード・表を使ってわかりやすく解説します!
1. そもそもenumってなに?
簡単に言うと「決まった値だけを使える特別な型」
enum は、「選択肢が限られている値」を表現するためのものです。
例えば「曜日」「季節」「方角」など、意味のある決まった値だけを扱いたいときに使います。
public enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
このように宣言しておくと、以下のように使えます。
Season now = Season.SUMMER;
2. switch文ってなに?
複数の選択肢を分岐するための文
switch (season) {
case SPRING:
System.out.println("春です");
break;
case SUMMER:
System.out.println("夏です");
break;
}
switch文は、ある変数の値に応じて処理を分けたいときに便利な構文です。
特に enum のように「限られた選択肢」があるときには、とても使いやすくなります。
3. なぜenumとswitch文は相性がいいの?
理由は大きく5つあります!
【理由1】型安全でバグが起きにくい!
enum を使えば、間違った値を代入できません。
Season season = Season.SPRING;
// Season season = "SOMETHING"; ← これはエラー!
これによって、switch 文の中で間違った条件を判定するリスクが激減します。
【理由2】すべての値が見えるから可読性が高い!
switch 文は enum のすべての値を並べることができるので、何を判定しているのかが一目で分かります。
switch (direction) {
case NORTH:
...
case EAST:
...
case SOUTH:
...
case WEST:
...
}
if-elseで書くよりもスッキリして見やすくなります。
【理由3】コンパイラが網羅性をチェックしてくれる!
Javaの新しいバージョン(Java17以降)では、switch式が導入され、enum のすべての値を扱っているかをチェックしてくれます。
int result = switch (status) {
case OK -> 1;
case ERROR -> 0;
// すべてのケースを扱っていれば、default が不要に!
};
これにより、漏れがない安全なコードが書けるようになりました。
【理由4】実行速度が速い!
enum と switch を組み合わせたコードは、コンパイル時に効率的な命令に変換されるため、if文の連続よりも高速に処理されることが多いです。
パフォーマンスが重要なアプリでは、大きな違いになります。
【理由5】enumには便利な機能もある!
enum はただの定数集ではありません。フィールドやメソッドを持つこともできるオブジェクトです。
public enum Rank {
BRONZE(1), SILVER(2), GOLD(3);
private int level;
Rank(int level) {
this.level = level;
}
public int getLevel() {
return level;
}
}
これを switch 文と組み合わせれば、柔軟で拡張性の高い処理ができます!
4. 実際のコード例で確認しよう!
① 基本的な使い方
public enum Day {
MONDAY, TUESDAY, WEDNESDAY
}
public class Main {
public static void main(String[] args) {
Day today = Day.TUESDAY;
switch (today) {
case MONDAY:
System.out.println("週の始まり!");
break;
case TUESDAY:
System.out.println("まだ火曜日…");
break;
case WEDNESDAY:
System.out.println("週の真ん中!");
break;
}
}
}
② Java17以降のswitch式を使った例
public enum Status {
SUCCESS, ERROR, PENDING
}
public class Main {
public static void main(String[] args) {
Status status = Status.SUCCESS;
String message = switch (status) {
case SUCCESS -> "成功しました!";
case ERROR -> "エラーが発生しました";
case PENDING -> "処理中です";
};
System.out.println(message);
}
}
5. まとめ表で振り返ろう!
| 特徴 | enumとswitchの関係性 |
|---|---|
| 型安全 | enumにより誤入力が起きにくい |
| 可読性 | すべての選択肢が明示され、見やすい |
| 網羅性チェック | Java 17+で漏れが検出される |
| 処理速度 | 最適化により高速に実行できる |
| 拡張性 | enumがオブジェクトとして使える |
Javaのswitchとenumをマスターしよう!
これからJavaを使って本格的な開発を目指すなら、switchとenumの組み合わせは避けて通れない重要テクニックです。
しっかり理解しておけば、より読みやすく安全で効率の良いコードが書けるようになります!
📘「絶対にJavaプログラマーになりたい人へ。」
もっとJavaをしっかり学びたい方には、書籍「絶対にJavaプログラマーになりたい人へ。」がオススメです。
初心者から現場レベルにステップアップするためのノウハウが詰まっています!
🎓 実践サポートが欲しい方は「サイゼントアカデミー」へ!
- 現役エンジニアがマンツーマンでサポート
- 転職サポートも充実
- Java特化で安心!
おわりに
enum と switch の相性は抜群!という理由が、少しでも伝わったら嬉しいです。
コードがもっと読みやすく、もっと安全になるこのテクニック、ぜひ活用していきましょう!


コメント