【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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年10月27日重回帰分析はディープラーニングの「細胞」だった?"ご先祖様"と"最強の進化系"のつながりを徹底解剖
山崎講師2025年10月27日機械学習の"ご先祖様"?重回帰分析が今も最強の「基礎」である理由
山崎講師2025年10月27日ディープラーニングの「常識」を疑え!相関分析が“無力”に見える理由と、それでも使うべき本当の価値
山崎講師2025年10月27日相関分析は最強の「データスカウト」!機械学習の精度を上げる”相棒”の正体とは