【いんたーふぇーす】

インターフェース とは?

💡 クラスへの「守るべき約束書」
📌 このページのポイント
インターフェース:契約を定義する仕組み インターフェース: 動物 鳴く(): string 動く(): void 実装 実装 実装 犬クラス 鳴く() → "ワン!" 動く() → 走る ✓ 契約を満たす 猫クラス 鳴く()→"ニャー" 動く()→忍ぶ 鳥クラス 鳴く() → "ピヨ!" 動く() → 飛ぶ ✓ 契約を満たす
インターフェースのイメージ
ひよこ ひよこ

インターフェースって何?抽象クラスと何が違うの?

ペンギン先生 ペンギン先生

コンセントの形を思い浮かべてみて。「2穴のコンセント」という規格(インターフェース)があれば、どのメーカーのプラグでも刺さるよね。インターフェースはそれと同じで、「このメソッドを必ず実装してね」というルールだけを決めるものなんだよ。

ひよこ ひよこ

なんでインターフェースを使うの?直接クラスを作ればいいんじゃないの?

ペンギン先生 ペンギン先生

例えば「支払い処理」を考えてみよう。クレジットカード、PayPay、銀行振込とか色々な方法があるよね。それぞれ別のクラスを作って、全部に「pay()メソッドがある」とインターフェースで約束しておけば、使う側は「pay()を呼ぶだけ」で済むんだ。支払い方法を後から追加しても使う側のコードを変えなくていいよ。

ひよこ ひよこ

実装クラスってインターフェースを複数持てるの?

ペンギン先生 ペンギン先生

持てるよ!これがインターフェースの強みの一つで、「飛べる」「泳げる」みたいな複数の能力を組み合わせられるんだ。多くの言語で継承は1つのクラスからしかできないけど、インターフェースは複数実装できるんだよ。

ひよこ ひよこ

おもしろい!抽象クラスとインターフェースはどう使い分けるの?

ペンギン先生 ペンギン先生

抽象クラスは「共通の処理(実装)も持てる」、インターフェースは「ルールだけを定める」という違いがあるよ。最近はJavaなどで「デフォルトメソッド」という機能が増えてインターフェースにも実装を書けるようになったんだ。そのせいで「どっちを使えばいいの?」と混乱するケースが増えていて、ベテランでも判断に迷うポイントになっているよ。

ひよこ ひよこ

インターフェースって名前に「I」をつけるのが正しいの?

ペンギン先生 ペンギン先生

これは言語や現場によって全然違って、C#Javaの古いコードベースでは「IPayment」のように「I」プレフィックスをつける慣習があったんだ。でも最近は「Payment」のまま使うスタイルも増えていて、チームの規約次第。実はこの命名規則の使い分けはベテランエンジニア同士でも意見が割れることがある微妙なポイントなんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「インターフェース」って出てきたら「クラスが守るべきメソッドの約束リストだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「interface」 = 接点・境界面
💬 inter(間)+face(面)。UIのinterfaceと同じ言葉だが、プログラミングでは「クラス同士の接続ルールを定める設計図」という意味で使われるよ
← 用語集にもどる