Categories
リファクタリング

インターフェース分離の原則

 インターフェース分離の原則(Interface Segregation Principle、ISP)は、あるクラスが利用しないメソッドに依存しないように求めています。具体的には、1つの大きなインターフェースよりも、クライアントが必要とする小さな専用のインターフェースを提供するということです。クライアントは自分にとって必要なメソッドだけを利用でき、不必要なメソッドに依存することがありません。

インターフェース分離の原則に従っていない例

この例では、Worker インターフェースが work、eat、sleep の3つのメソッドを含んでいます。しかし、SuperWorker クラスは work メソッドしか使用しておらず、eat と sleep メソッドは使用されていません。このような場合、SuperWorker クラスは不要なメソッドを実装していることになり、ISPに反しています。

ISPに従った修正例は、クライアントが必要なメソッドだけを提供する小さな専用のインターフェースを作成し、それを使用することです。

インターフェース分離の原則に従っている例

 この例では、Worker インターフェースが work、eat、sleep の3つのメソッドを含んでいた代わりに、3 つの小さな専用のインターフェース Workable、Eatable、Sleepable があります。SuperWorker クラスは Workable インターフェースだけを実装し、不要なメソッドを持たないようになっています。これにより、クライアントは必要なインターフェースだけを使用でき、不必要なメソッドに依存することがありません。ISPに従って、インターフェースを小さく、クライアントが依存する範囲を最小限に抑えることができます。