委譲と集約の違いとは?Javaを使って新人エンジニアにやさしく解説!
こんにちは。ゆうせいです。
今回はオブジェクト指向設計の中でも混同しやすい2つの概念、
「委譲(Delegation)」と「集約(Aggregation)」の違いについて、
Javaの例を交えてやさしく解説していきます!
まずはざっくり結論!
概念 | 意味 | 関係性の種類 | 例え |
---|---|---|---|
委譲 | 処理を他のオブジェクトに任せる | 「〜に任せる」関係 | 「秘書が上司の予定を代わりに調整」 |
集約 | 複数の部品から構成される全体を表す | 「部分と全体」の関係 | 「クラスと生徒」 |
では、それぞれの意味と使いどころをもう少し具体的に見ていきましょう!
委譲(Delegation)とは?
H3: 他のオブジェクトに「処理を任せる」こと
クラスの中で別のオブジェクトを使って、そのオブジェクトに仕事をしてもらうことを委譲といいます。
Javaの例:
class Printer {
void print(String message) {
System.out.println(message);
}
}
class Report {
private Printer printer = new Printer();
void output(String text) {
printer.print(text); // ← Printer に処理を「任せて」いる!
}
}
このように、Report
クラスは自分では出力処理を持たず、Printer
に「お願いしてるだけ」です。
集約(Aggregation)とは?
H3: 「全体と部分」の関係で構成されるオブジェクト設計
集約は「含まれるが、依存しすぎない」関係です。
全体が消えても部分は生きていられるのがポイントです。
Javaの例:
class Student {
String name;
Student(String name) {
this.name = name;
}
}
class Classroom {
private List<Student> students;
Classroom(List<Student> students) {
this.students = students;
}
void showStudents() {
for (Student s : students) {
System.out.println(s.name);
}
}
}
Classroom
はStudent
を持っている- でも
Student
はClassroom
がなくても独立して存在できる
これが集約です!
委譲と集約の違いを図にすると?
委譲(Delegation)
[Report] ───▶︎ [Printer]
(処理を依頼)
集約(Aggregation)
[Classroom]
├─ [Student A]
└─ [Student B]
(一部として所有)
よくある勘違いポイント!
- 委譲は「機能的な役割分担」
→ 実際の仕事(処理)を別のオブジェクトに「やってもらう」 - 集約は「構成要素として持つ」
→ 全体が部分を「所有」しているけれど、ライフサイクルは別
まとめ:どちらも「関連を持つ」けど、目的が違う!
観点 | 委譲(Delegation) | 集約(Aggregation) |
---|---|---|
関係の種類 | 処理の移譲 | 部品として所有 |
意味 | 機能を別クラスに任せる | 構造として含む |
依存度 | 高い(処理を任せている) | やや低い(自立できる) |
ライフサイクル | ほぼ同じ | 別々で存在できる |
次のステップ:練習問題や応用へ!
- 自分で「委譲」と「集約」のコードを1つずつ書いてみましょう。
- チーム開発でどちらの関係を使うべきかを設計段階で意識してみましょう。
- 「集約」とよく似た「合成(Composition)」や「継承(Inheritance)」との違いも学んでみてください!
正しい関係を設計することが、拡張性と保守性の高いコードの第一歩です!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年5月9日「テストのしやすさ」を考えたクラス設計とは?Javaを例に新人エンジニア向けにやさしく解説!
山崎講師2025年5月9日合成と集約の違いとは?新人エンジニア向けにやさしく解説!
山崎講師2025年5月9日委譲と集約の違いとは?Javaを使って新人エンジニアにやさしく解説!
山崎講師2025年5月9日「継承は最後の手段」とは?新人エンジニアのためのやさしい解説