👻

【Java Silver勉強】interfaceの良い所

2023/10/19に公開
【前置き】
    メモ程度に簡単に書いて置くための物になっていますので、正確な情報をお求めの方は、
    別のサイトをお勧めいたします。

Interfaceの使い方



【インターフェイス宣言用クラス】

interface <インターフェイス名>{
    <メソッド>
}


【インターフェイス実装用クラス】

public abstract class <クラス名> implements <インターフェイス名>{
    @Override
    <インターフェイス内で宣言したメソッド>
}

Interfaceの使い道

Interfaceはインスタンス化なしでメソッドやメンバ定数を宣言するために実装された機能です。

インスタンス化しないことによって、メモリを食わずに実行できるため、ちょっとだけ使いたくなった関数や定数を宣言することによって、メモリを食わないで実行することが可能になる。

要らなくなったら、すぐに消したりすることがメリットだと思います。

プログラミングを始めたころは、グローバルクラスを作り、そこに関数やら変数やらを宣言&処理を書いてあげれば、いいと思ってました。

//インポート文省略
public class GlobalCommon {
    private int val, num;
    private String str, name;
    private boolean flag;

    //オーバーロードコンストラクタ
    public GlobalCommon(int val, int num, String str, String name, boolean flag){
        this.val = val;
        this.num = num;
        this.str = str;
        this.name = name;
        this.flag = flag;
    }

    public GlobalCommon(int val, String str, boolean flag){
        this.val = val;
        this.str = str;
        this.flag = flag;
    }

    // カプセル化
    public void setVal(int val){
        this.val = val;
    }
    ... カプセル用の関数宣言&実装

    public void debug_log(){
        System.out.println("デバッグしてるよ。")
    }

}

簡単に書いてみましたが、前まではこんな感じに書いてましたw

ですが、一瞬だけ欲しい関数があった場合不便だなぁと思っていましたが、interfaceを使えば、グローバルクラスみたいにわざわざインスタンス化しないで呼び出せて、消す時も簡単なので(どこにも参照されてなければ...)積極的に使うべきだと思います!


ですがデメリットとして、ファイル数が増えやすい傾向にあります。
内部クラスで宣言してもいいと思いますが、可読性が悪く別クラスにしたり、宣言用と実装用では別々にしたほうが良さそうなので、そこだけがデメリットな気がします。

比較

Interface グローバルクラス
インスタンス化 なし あり
可読性 高い 低い
メンテナンス性 良い 極悪い
ファイル数 複数(宣言&実装&その他...) 単数(場合によっては複数)

まとめ

Interfaceはインスタンス化しないで呼びだせるから、メモリも食わないし結構シンプルにまとまってるから、可読性も高い為積極的に使ったほうがよさそうだと思いました。

Discussion