class FeatureA { func foo(): String { let b = FeatureB() // Use `FeatureB` return b.bar() + "!!" } } class FeatureB { ... func bar(): String { // do something } } ここでは、FeatureA クラスが FeatureB クラスを利用している。こういう時、 FeatureA は FeatureB に依存していると表現される。FeatureB が存在しなければ、FeatureA は利用できないからだ。 前述のコードは問題なく動作するが、FeatureA のユニットテストをしたい時に問題が起こる。FeatureB をテスト用のモックに差し替えられないのだ。 だから、私達は Protocol という道具を使って、FeatureB を差し替