DI... 🤔
この言葉聞いてわかります?
ググっても、依存注入... 🤔
最近のAndroid
ではDagger2
を利用したりしてこの依存注入を行っています。
Android developer公式(https://developer.android.com/training/dependency-injection)
今回はDagger
の説明ではなく、そもそもDIって実際どんなものなの?という人に向けて説明していければと思います。
今回はそんなDI(DependencyInjection)について以前投稿したMVVMの旨味を知るの記事みたいにさらっと書いて行こうと思います。
旨味
- クラス間を疎結合にできる 🚀
- テストしやすくなる 🚀
DIは依存注入なのですが少し付け加えると外部から今まで依存して困っていたものを注入できる
なんか言い方が痔の薬見たいですね笑
例
DI 無
取り外し不可のバッテリーで動くロボット🤖を想像してください。
このロボットはバッテリーに依存しているといえます。
この場合、もっと強力なバッテリーに交換しようにも交換することができません。
全部分解してバッテリーを取り外しすしか🤮
DI 有
取り外し可能のバッテリーで動くロボット🤖を想像してください。
ロボットに違うバッテリーを入れて動くか試したい。
このロボットはバッテリーが取り外し可能なため、違うバッテリーに差し替えてテストが簡単👍
プログラム
ではコードに書く際の考え方を見てみます。
少し説明がごちゃごちゃしてきてしまうので図を作ってみました。
大体こんな感じで捉えて貰えばいいでしょうか。
今まで
ClassA
の中でたてられていたClassB
のインスタンスをConstructor
orSetter
経由でもらう事で外部から注入することができるようになりました。
こうすることで外から自由にインスタンスを渡せるので動的に変更できるという利点があります。
それによって、クラス間が疎結合となりテストなどもしやすくなります。🤩
以上です。