戻り値(参照/プリミティブ) — API レイヤ設計
メソッドは「処理の結果」を返すことができます。この結果を 戻り値 と呼びます。戻り値には プリミティブ型(int, double, boolean など)と 参照型(String, 配列, クラスのインスタンスなど)の2種類があります。APIレイヤ設計では「どんな型を返すか」が利用者にとっての使いやすさを左右します。
プリミティブ型を戻り値にする
特徴
- 値そのものを返す。
- 軽量でシンプル。
- null にならない(必ず値がある)。
例:計算結果を返す
int add(int a, int b) {
return a + b;
}
double average(double x, double y) {
return (x + y) / 2;
}
boolean isAdult(int age) {
return age >= 18;
}
Java👉 数値計算や真偽判定など、単純な結果はプリミティブ型で返すのが基本。
参照型を戻り値にする
特徴
- オブジェクトや配列を返す。
- 複数の値や複雑な構造をまとめて返せる。
- null を返す可能性があるため、利用側でチェックが必要。
例:文字列や配列を返す
String greet(String name) {
return "Hello, " + name;
}
int[] createRange(int n) {
int[] arr = new int[n];
for (int i = 0; i < n; i++) arr[i] = i;
return arr;
}
Person findPersonById(int id) {
// 見つからなければ null を返す可能性あり
if (id == 1) return new Person("Sato");
return null;
}
Java👉 複数の値や構造化データを返すときは参照型。
API レイヤ設計での戻り値選び
- プリミティブ型:
- 単純な計算結果(合計、平均、真偽判定)。
- null を返す必要がない。
- 参照型:
- 複数の値をまとめたい。
- データ構造やオブジェクトを返す。
- null を返す可能性がある(例: 検索結果が見つからない)。
設計の工夫
- Optional<T>(Java 8+): null の代わりに「値がある/ない」を表現できる。
import java.util.Optional;
Optional<Person> findPerson(int id) {
if (id == 1) return Optional.of(new Person("Sato"));
return Optional.empty();
}
Java- DTO(データ転送オブジェクト): 複数の値をまとめて返す専用クラスを作る。
class Result {
int code;
String message;
Result(int code, String message) {
this.code = code;
this.message = message;
}
}
Result process() {
return new Result(200, "OK");
}
Java例題で練習
例題1: 税込み価格を返す(プリミティブ)
double withTax(double price) {
return price * 1.10;
}
System.out.println(withTax(1000)); // 1100.0
Java👉 単純な計算結果はプリミティブで十分。
例題2: 顧客検索(参照型)
class Customer {
String name;
Customer(String name) { this.name = name; }
}
Customer findCustomer(String id) {
if ("001".equals(id)) return new Customer("Tanaka");
return null; // 見つからなければ null
}
Customer c = findCustomer("001");
if (c != null) System.out.println(c.name);
Java👉 検索結果は「見つからない」可能性があるため参照型で返す。
例題3: Optional で安全に返す
Optional<Customer> safeFind(String id) {
if ("001".equals(id)) return Optional.of(new Customer("Tanaka"));
return Optional.empty();
}
Optional<Customer> result = safeFind("002");
result.ifPresent(c -> System.out.println(c.name));
Java👉 null を避けたいときは Optional を使う。
テンプレート集
プリミティブ型を返す
型 メソッド名(引数) {
// 計算や判定
return 値;
}
Java参照型を返す
型 メソッド名(引数) {
// オブジェクト生成や検索
return オブジェクト; // null の可能性あり
}
JavaOptional を返す
Optional<型> メソッド名(引数) {
if (条件) return Optional.of(値);
return Optional.empty();
}
Javaまとめと次の一歩
- プリミティブ: 単純な結果。軽量で null なし。
- 参照型: 複雑な結果。null の可能性あり。
- Optional/DTO: API 設計で安全性・可読性を高める。
👉 練習課題として「商品検索API」を想定し、商品が見つかれば Product オブジェクトを返し、見つからなければ Optional.empty() を返すメソッドを作ってみると、実務的な理解が深まります。

