Java Technology

[Java / Interface] インターフェースとは

2020-12-29

インターフェースについて整理。


インターフェースをまずは身近な例で考える

まずは身近な例で考えてみる。

こちらの回答がとてもわかりやすかったので、参考にする。

インターフェースは身近な例で言えば、「ルール」、「規格」とか「契約」で言い表されることが多い。

上記のリンクの例で言えば、電力会社と家電製品があげられていた。

例えば電力会社の例なら、電力会社との契約がインターフェースにあたる。



電気を使う人にとっては、電気がどのように生み出されたか関係なく、ただ電力会社と契約すれば、電気を使えるようになる。

火力で作られた電気を使うならこれを準備しなきゃ、とか原子力で作られた電気ならこれを準備しなきゃ、とか考える必要がない。

また、将来新たに電気を生み出す手法が生まれても、電力会社との契約するだけで、簡単に電気を使うことができる。

家電製品でも同じことが言える。



様々な家電製品はコンセントをつないで使用する必要がある。

コンセントの形がもし家電製品ごとに違っていたら、家電ごとにコンセントを作らなくてはいけないから大変な作業になる。

コンセントの形を規格として共通にしておけば、将来的に新しい家電が出てきた時も、同じコンセントを使うことができる。


インターフェースのメリットは、未来のため

ここで、二つの例を出したが、ここでのインターフェースの大きなメリットとしては、未来だ。

電力会社の例なら、未来違う電気の生み出す方法ができた時、インターフェースがあれば、ユーザーはスムーズに電気を使うことができる。

また、家電の例なら、ユーザーは新商品を買った後、スムーズにコンセントに繋いで商品を使うことができる。


ではJavaプログラムにおけるインターフェースは?

プログラムも一緒で、未来に作られるプログラムのためのルール付け、規格がインターフェースとなる。

具体的に書き方を見ていく。


インターフェースの書き方は?

下記のように記述。

//インターフェースの宣言
interface インターフェース名{}

//インターフェースの実装
class クラス名 implements インターフェース名{}


インターフェースのプログラムの例

下記がプログラム例。interfaceでは、prepare()メソッドを宣言している。

なのでインターフェースが実装されているクラスでは、prepare()を使う必要がある。

// インターフェースの宣言
interface BindingCheck {
    void prepare();
}
 
// インターフェースの実装
class SkierA implements BindingCheck {
    public void prepare(){
        System.out.println("SkierAはSalomonの板を使ってビンディングを取り付けた。");
    }
}
 
// インターフェースの実装
class SkierB implements BindingCheck {
    public void prepare(){
        System.out.println("SkierBはAtomicの板を使ってビンディングを取り付けた。");
    }
}
 
// 実装したクラスを実行
public class Main {
    public static void main(String args[]) {
        SkierA skierA = new SkierA();
        skierA.prepare();
        
        SkierB skierB = new SkierB();
        skierB.prepare();
 
    }
}


インターフェースの宣言で変数、メソッドなどある程度形作り、インターフェースを実装したクラスでメソッドを強制的に実装させることで、一定の規格に従わせるメリットを持つ。

ただし上記のような短いコードではなく、JAVAの強みである大規模開発で、メリットを発揮するものなのかもしれない。

-Java, Technology