【Java】 interfaceとはなんぞや?
よくわからないのでアウトプット.
これがあってるのかはわからない..気をつけろ...
interfaceとは?
見つけた限りでは
- メソッド名,引数,返り値のみを定義したもの
- 「このクラスは,〇〇というメソッドを持ちます」という「約束」
- 設計に一定の基準を設け,その基準を強制させるもの
こんな奴らしい...
いつ使うの?
- 今後沢山,仕様変更がありそうな時
- 大人数での開発
- 大型プロジェクト
こんな時に使うそうだ.
interfaceの目的
- クラス間の依存度を下げたい
- 疎結合の実現
- 変更に強くしたい
観測した中で多かった意見.
仕様が生えてきたときにいっぱい変更したくない!!!
先に対策を打っておこうという感じだと思う.
どういうこと?
具体?例で説明を試みる.
前提
- チーム開発
- interfaceを使わずに作った
- 誰かが作ったクラスAがクラスBからあるデータを受け取っていた
ストーリー
- 仕様変更により,クラスCからデータを受け取るように変更しなければならなくなった.
- クラスCを作ったが,クラスAはクラスBからデータを受け取る前提だった,修正が必要に.
- クラス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