どうも、とがみんです。
オブジェクト指向プログラミングには、インターフェイス(interface)という概念があり、Javaにおいてもインターフェイスの概念が用いられます。
この記事では、Javaにおける「インターフェース(interface)」の概念、実装方法や、そのメリットをプログラムと共に紹介していきます。
Contents
インターフェースとは?
そもそも「インターフェイス(interface)」とは、日本語に直すと「境界」という意味があり、USBポートのように、コンピューターと、マウス、キーボードを繋ぐ周辺機器の接続部分であったり、
PCやスマホのユーザーインターフェースといった、ユーザーとデバイスの接点を表すときによく「インターフェース」という言葉が用いられます。
プログラミングにおいては、ソースコードがある規模以上になると、機能ごとにプログラムを分割して管理していくことで、ソースコードが複雑化することを防いでいきますが、
その際の、分割したソースコードと、メインとなるプログラムの境界、接続部分のことをインターフェースと言います。
次に、プログラムいおいて、インターフェースとはどういうものなのか、どのようにインターフェースを実装するのか、また、実装することによって、どのようなメリットがえられるのかについてまとめていきます。
インターフェースの実装
インターフェースの実装方法と、インターフェースによるメリットを考えていくにあたって、
以下にインターフェースを実装しない場合のプログラムと、インターフェースを実装したプログラムを載せています。
それらを比較し、インターフェースについて考えていきます。
インターフェースを実装しない場合
インターフェースを実装しない場合のプログラムについてです。
PCクラス
1 2 3 4 5 6 7 8 | public class PC { //Mouseクラスのインスタンスのみ設定可能 private Mouse device = new Mouse(); public void action(){ device.action(); } } |
周辺機器のクラス
1 2 3 4 5 6 7 8 9 10 | public class Mouse { public void action(){ System.out.println("クリックします"); } } public class Printer { public void action(){ System.out.println("印刷します"); } } |
上記のプログラムのイメージ図は以下のような感じです。
上記のコードだと、PCには、マウスしか接続できない「マウス専用ポート」しか用意されておらず、プリンターは接続できません。
また、もしMouseクラスが削除されてしまった場合、PCクラスにはMaouseクラスのコードが書かれているため、影響が出てしまします。
インターフェースを実装した場合
USBインターフェースを実装した場合のプログラムを以下にまとめています。
PCクラス
1 2 3 4 5 6 7 8 | public class PC{ //USBインターフェースを実装(implement)しているクラスであれば、自由に付け替え可能。 public USB device = new Mouse();//new Printer();も可 public action(){ device.action(); } } |
PCクラスには、一つのUSB型のdevice変数を定義しています。この変数には、USBインターフェースを実装(implements)したクラスであれば、すべて接続することができます。
USBインターフェース
1 2 3 | public interface USB{ void action(); } |
USBインターフェースは上記のように定義します。
インターフェースに定義するメソッドは、具体的な処理は書かず、メソッドの型のみを宣言する。具体的な処理内容は、このインターフェースを実装したクラスに記述します。
USBインターフェースを実装した周辺機器クラス
1 2 3 4 5 6 7 8 9 10 11 12 | public class Mouse implements USB{ @Override public void action(){ System.out.println("クリックします"); } } public class Printer implements USB{ @Override public void action(){ System.out.println("印刷します"); } } |
インターフェースを実装(implements)すると、インターフェースに書いたメソッドは必ずOverrideされます。
上記のようにUSBインターフェースを実装した場合のプログラムのイメージ図は以下のようになります。
USBインターフェースを用いることによって、USBインターフェースを実装している、マウスやプリンターといったデバイスを接続することができるようになります。
Mouseクラスや、Printerクラスが削除されてしまった場合に、PCクラスには影響しません。
また、新たにUSBインターフェースを実装したクラスを作成した場合も、PCクラスに直接変更を加える必要なく、新たなデバイスをPCに接続することができます。
インターフェース実装のメリット
インターフェースを利用することによるメリットについてです。
クラス間の依存性を排除でき、プログラムの変更に強くなる
インターフェースを使用しなかった場合は、一方のクラスを変更すると、もう一方のクラスを変更する必要性がでてきてしまいますが、
インターフェースを利用することによって、一方のクラスに変更があっても、もう一方のクラスには変更する必要はありません。
上記の例でいうと、インターフェースを利用しなかった場合、Mouseクラスを削除すると、PCクラスに変更を加える必要がでてきますが、USBインターフェースを用いることによって、PCクラスに直接変更を加える必要がなくなります。
また、あらたな部品、マウスやプリンター以外にも、接続デバイスを作成する際に、USBインターフェースを実装すれば、簡単に部品の付け替えをすることができるようになります。
このように、インターフェースを実装することによって、クラス間の依存性が排除され、よりプログラムの変更に強い堅牢なコードを書くことができます。
まとめ
Javaにおけるインターフェースの概念について、またメリットについてまとめてきました。
インターフェースとは、部品と部品を接続するための規約、約束事のようなものであり、それを実装することによって、部品と部品の依存性が排除され、より変更に強い堅牢なプログラムをかけるといったメリットがあります。
なにか、不明点、間違っている点等あればご指摘いただけると嬉しいです。
参考文献等
>Java インターフェース メリット わからない
>プログラムを「変更」しやすくする“インターフェイス” (1/3)
>はじめてのインタフェース|Javaの道
>インターフェースとは?~継承とは役割が違う~|オブジェクト指向プログラミング(OOP)をおさらいしよう(3)
※Javaプログラミングの概念を理解するにあたってはおすすめです。