実務風メニューアプリ(Main + Service構造)
では、先ほどのユーザー入力付きメニューを 実務風にクラス構造で整理 してみましょう。
ポイントは Mainクラス と Serviceクラス を分けて責務を明確にすることです。
1. 設計の考え方
| クラス | 役割 |
|---|---|
Main | アプリ起動・ユーザー入力ループ・終了制御 |
MenuService | メニューの処理内容(一覧表示・検索・購入など)を担当 |
こうすると、処理の追加や変更があっても Mainを触らずServiceだけ更新 できるので実務で便利です。
2. MenuServiceクラス
public class MenuService {
// 商品一覧表示
public void showItems() {
System.out.println("→ 商品一覧を表示します。\n");
}
// 商品検索
public void searchItem(String keyword) {
System.out.println("→ 「" + keyword + "」を検索しました。\n");
}
// 購入処理
public void purchase() {
System.out.println("→ 購入手続きに進みます。\n");
}
}
Java📝 ポイント:
- 1つの処理ごとにメソッド化して責務を分ける
- メニュー処理の追加・修正が容易
3. Mainクラス(入力とswitch制御)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
MenuService service = new MenuService(); // Serviceクラスのインスタンス化
while (true) {
// メニュー表示
System.out.println("=== メニュー ===");
System.out.println("1: 商品一覧を見る");
System.out.println("2: 商品を検索する");
System.out.println("3: 購入手続きへ進む");
System.out.println("0: 終了する");
System.out.print("番号を選んでください: ");
int choice = scanner.nextInt();
scanner.nextLine(); // 改行を読み飛ばす
switch (choice) {
case 1:
service.showItems();
break;
case 2:
System.out.print("検索したい商品名を入力してください: ");
String keyword = scanner.nextLine();
service.searchItem(keyword);
break;
case 3:
service.purchase();
break;
case 0:
System.out.println("→ プログラムを終了します。");
scanner.close();
return;
default:
System.out.println("→ 無効な番号です。\n");
}
}
}
}
Java4. 仕組みの整理(図イメージ)
Main
├─ whileループ(入力待ち)
├─ switch(choice)
│ ├─ case 1 → service.showItems()
│ ├─ case 2 → service.searchItem(keyword)
│ ├─ case 3 → service.purchase()
│ └─ case 0 → 終了
MenuService
├─ showItems()
├─ searchItem(String keyword)
└─ purchase()
💡 ポイント:
- Mainは「入力受付とループ制御」だけ
- MenuServiceは「処理内容の実装」に専念
- これで 責務が分離され、保守性・可読性が向上
5. 発展アイデア(さらに実務寄りに)
- Enumでメニュー管理
enum MenuOption { SHOW, SEARCH, PURCHASE, EXIT }
Java→ switch文をEnumで制御すると安全性UP
- 例外処理で入力エラー対応
try {
int choice = scanner.nextInt();
} catch(InputMismatchException e) {
scanner.nextLine(); // 不正入力をクリア
System.out.println("数字を入力してください");
}
Java- メニューの処理を別パッケージに分ける
serviceパッケージ → MenuService.javaappパッケージ → Main.java
→ 大規模プロジェクト向け設計
💡 この構造を使うと、将来「購入処理を複雑化したい」「検索機能をデータベース対応にしたい」などの改修も Mainを触らずServiceだけ変更 で済むようになります。
