LoginSignup
0
0

More than 3 years have passed since last update.

[Java] インターフェースとはなんぞや?

Posted at

【Java】 interfaceとはなんぞや?

よくわからないのでアウトプット.
これがあってるのかはわからない..気をつけろ...

interfaceとは?

見つけた限りでは

  • メソッド名,引数,返り値のみを定義したもの
  • 「このクラスは,〇〇というメソッドを持ちます」という「約束」
  • 設計に一定の基準を設け,その基準を強制させるもの

こんな奴らしい...

いつ使うの?

  • 今後沢山,仕様変更がありそうな時
  • 大人数での開発
  • 大型プロジェクト

こんな時に使うそうだ.

interfaceの目的

  • クラス間の依存度を下げたい
  • 疎結合の実現
  • 変更に強くしたい

観測した中で多かった意見.
仕様が生えてきたときにいっぱい変更したくない!!!
先に対策を打っておこうという感じだと思う.

どういうこと?

具体?例で説明を試みる.

前提

  • チーム開発
  • interfaceを使わずに作った
  • 誰かが作ったクラスAがクラスBからあるデータを受け取っていた

ストーリー

  1. 仕様変更により,クラスCからデータを受け取るように変更しなければならなくなった.
  2. クラスCを作ったが,クラスAはクラスBからデータを受け取る前提だった,修正が必要に.
  3. クラスCの内容を知った上で,誰かが作ったクラスAを修正することになった.

何がまずいのか?

問題はクラスCの内容を知った上で,誰かが作ったクラスAを修正しなければならないことです.
クラスAがクラスBに対する依存度が高いため,このようなことになってしまいました.

しかも今度は,クラスCに対する依存度が高くなっています

今後クラスDやE生えてきたら...大変ですね..

どうしたらよかったのか?

クラスAとクラスBの間にinterfaceを設けておく

クラスAはinterfaceに従って流れてきたデータを受け取ります.
interfaceに従ってクラスCを実装すれば,クラスAを変更する必要がなくなります.

将来,クラスCをDやEに変更したとしてもinterfaceに従っている限り,クラスAはクラスEやDを知る必要がありません.

今後もクラスAはinterfaceに従って流れてきたデータを受け取るだけです.

たぶん...

結局何が言いたい?

依存度を下げるために外側に規約を作っておけば,中身を知る必要はないぜ.
しかも規約に従っとけば何してもおk

って,事だと思う.みんな規約に従えば,ヨシ!!!
その規約がinterface.

ごめん,やっぱりよくわからなかったわ...

言葉だらけでお察しの通りよくわかってないです..
もう疲れたのでこのまま投げます.

参考文献

各所で引用されている神
https://www.gixo.jp/blog/5159/

teratail
https://teratail.com/questions/70213

もうちょっと具体的な話が多い記事
https://engineer-club.jp/java-implements#implements3

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0