依存性(Dependency)とは
- コードで二つのモジュール間の繋がり
- オブジェクト指向言語では二つのクラスの関係とも言います。
- あるクラスAが違うクラスまたはインタフェースBを利用するときにAがBに依存すると言います。
- AはBがなくては動けないし、Bを再利用しなければAも再利用できないです。
生産チームで自動車を生産する。 自動車は内部的にタイヤを生産する。
上記の内容をJavaで表現すると
new Car(); Carのコンストラクタでnew Tire();を行う。
そして簡単にJavaで依存性とは
依存性はnewです。
newを実行するCarとTireの間でCarがTireに依存していると言えます。
依存性が危ない理由
- 一つのモジュールが変わったら依存しているモジュールまで影響があるため、よくないです。
- 依存性は再利用を減少させるため、よくないです。
- つまり、開発速度、コードのクオリティ、コードの可読性に影響が出てしまします。
- テスト可能なアプリを作る時にユニットテスト作成が難しいです。
- ユニットテスト自体が他のモジュールから独立でテストを要求するためです。
依存性タイプ
- Class Dependencies
- Interface
- Method/Field Dependencies
Class依存性の例
public byte[] readFileContents(String fileName){
}
上記のメソッドはStringをパラメータとして使っているため、Stringクラスに依存しています。
Interface依存性の
public byte[] readFileContents(CharSequence fileName){
}
- CharSequenceはJavaのスタンダードインタフェースです。
- CharBuffer、String、StringBufferそしてStringBuilderはCharSequenceインタフェース継承しているので、このクラスのインタフェースはこのメソッドのパラメータとして使うことができます。(依存している。)
Method依存性の例
public byte[] readFileContents(Object fileNameContainer){
Method method = fileNameContainer
.getClass()
.getMethod("getFileName", null);
String fileName = method.invoke(fileNameContainer, null);
}
- メソッド/フィールド依存性とはどのオブジェクトのメソッドまたはフィールドに依存していることを言います。
- パラメータ(Object Class)のget FileNamメソッドに依存しています。
参考
https://velog.io/@huttels/의존성이란
https://tony-programming.tistory.com/entry/Dependency-의존성-이란
