【Java初心者向け】SOLID原則の「I(インターフェース分離の原則)」をやさしく解説!
こんにちは。ゆうせいです。
今回はSOLID原則の「I:インターフェース分離の原則(Interface Segregation Principle)」について解説します。
Javaのコード例を使って、インターフェースってそもそもなに?という方でも分かるように、順を追って説明していきます!
インターフェース分離の原則(ISP)とは?
一言で説明すると?
「クライアント(利用する側)は、使わないメソッドに依存してはいけない」という原則です。
どういうこと?
大きすぎるインターフェースを作ってしまうと、必要ない機能まで実装を強制されてしまう。
その結果、関係のない機能変更にも巻き込まれてしまいます。
よくある例:ISPに違反しているコード
1つのインターフェースに全部盛り!
public interface Machine {
void print();
void scan();
void fax();
}
このインターフェース、印刷もスキャンもFAXも全部含まれています。
単機能プリンターが困る!
public class SimplePrinter implements Machine {
public void print() {
System.out.println("印刷しています");
}
public void scan() {
throw new UnsupportedOperationException("スキャンできません");
}
public void fax() {
throw new UnsupportedOperationException("FAXできません");
}
}
これはまさに「使わない機能に依存している」状態。例外を投げて対応しているのは危険なサインです!
良い例:インターフェースを分ける
必要な機能だけを持つインターフェースに分離!
public interface Printer {
void print();
}
public interface Scanner {
void scan();
}
public interface Fax {
void fax();
}
使う側は必要なものだけ実装すればOK!
public class SimplePrinter implements Printer {
public void print() {
System.out.println("印刷しています");
}
}
public class MultiFunctionPrinter implements Printer, Scanner, Fax {
public void print() {
System.out.println("印刷しています");
}
public void scan() {
System.out.println("スキャンしています");
}
public void fax() {
System.out.println("FAXしています");
}
}
必要な機能だけを選んで使える=インターフェース分離の原則を守っているということです。
例え話で理解しよう!
あなたがレストランで「ハンバーガーだけ頼みたい」のに、「ポテトとドリンクも強制的に付いてくる」セットしかないとしたらどう感じますか?
無駄な機能がついてくることは、開発者にも使う人にもストレスです。
「欲しいものだけを注文できるインターフェース」こそが理想です!
インターフェース分離の原則を守るメリット
メリット | 解説 |
---|---|
実装が簡単になる | 必要な機能だけ実装すれば良い |
不要な依存を避けられる | 無関係な変更の影響を受けない |
クラスの責任が明確になる | 単一責任の原則とも相性が良い |
注意点:小さくしすぎても逆効果?
もちろん、細かく分けすぎると逆に混乱することもあります。
目安としては、「1つのインターフェースに関連性の高い操作をまとめる」くらいの感覚でOKです。
設計時に考えるべき3つの質問
- すべてのメソッドがそのクラスにとって意味があるか?
- 使わない機能まで実装を強制していないか?
- インターフェースが肥大化していないか?
数式的に表すなら?
- 悪い設計:
インターフェースA = a + b + c + d + ...(全部盛り)
- 良い設計:
インターフェースA = a
、インターフェースB = b
、…
必要な機能だけを選んで組み合わせる設計が、拡張性の高いシステムをつくります!
まとめと次の学習ステップ
インターフェース分離の原則は、「使わない機能は持たせない」という、シンプルながら非常に重要な設計指針です。
新人エンジニアがまず意識すべきこと
- 「インターフェースにメソッドを追加したくなったら、それは分けるサインかも」
- 「1つのインターフェースに5つ以上のメソッドがあるなら、分離を検討」
- 「大は小を兼ねない」と思って設計しよう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。