← Go コース
37. インターフェース — 暗黙の実装
インターフェースは「どんなメソッドを持っているか」だけを定める型です。type Shape interface { Area() float64 } のように、必要なメソッドのシグネチャを並べて宣言します。ある型がそのメソッドをすべて備えていれば、その型は自動的にそのインターフェースを満たします。
Go の最大の特徴は、この実装が暗黙であることです。Java の implements のように「この型はこのインターフェースを実装します」と宣言する必要はありません。メソッドを満たしているという事実だけで、インターフェースとして使えます。これにより、インターフェースを使う側が後から「このメソッドさえあれば良い」と最小限の契約を定義でき、型同士の結合を緩く保てます。
下の例では Circle も Rectangle も Area() を持つので、どちらも Shape として同じ関数に渡せます。呼び出し側は具体的な型を知らなくても Area() を呼べる、これが抽象化の力です。インターフェースは小さく(メソッド一つや二つ)保つのが Go の流儀で、io.Reader や io.Writer のような小さなインターフェースが標準ライブラリ全体で再利用されています。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Go