依存性とは

依存性(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-의존성-이란

https://expert0226.tistory.com/189

コメントを残す