概要
「結局インターフェースって何なの?」
Javaを勉強し始めた人の大多数が抱く疑問かと思います。
そんな新規Javaユーザーを苦しめるinterfaceを簡単な文法のみでまとめてみました。
実際に書いてみましょう
経験談にはなりますが、記事だけ読んでいても身につくものでは無いと思います。
この記事は簡単なコードのみで解説しているので、読み終えた後などコードをコピペして遊んでみてください。
(実際にコピペする際はFormater、Printer、Mainをそれぞれ別のファイルに保存してください。)
使用例
public interface Formater {
public String format(String string);
}
さてさて、何やらフォーマットしてきそうなインターフェースが現れました。
そうです。このFormaterインターフェースは文字列を成形するメソッドを持ちます。
※interfaceを初めてみたよって人も臆さず読み進んでみてね。
public class Printer {
private Formater formater;
public Printer(Formater formater) {
this.formater = formater;
}
//format関数の結果を出力する
public void println(String string) {
String target = formater.format(string);
System.out.println(target);
}
}
今度はクラスのようです。
何やらプリントしてきそうなクラスです。
勘の良い方はお気付きになったかと思いますが、
このPrinterクラスではコンストラクタでFormter型を受け取ります。
既にワケわからなくなっている方は是非Eclipseなどで実際に書きながら読み進めてみてください。
そして最後に上記二つを使用するMainクラスです。
public class Main {
public static void main(String[] args) {
/**
* Name:
* PaddingFormater
* Function:
* 文字列をパディングする
*
* @author Pricam
*/
class PaddingFormater implements Formater {
@Override
public String format(String string) {
//引数の文字列をパディングする処理
return "Complete Padding";
}
}
/**
* Name:
* SplitFormater
* Function:
* 文字列を分割する
*
* @author Pricam
*/
class SplitFormater implements Formater {
@Override
public String format(String string) {
//例えば文字列 "HelloWorld" を "Hello World"に成形する処理
return "Complete Split";
}
}
//文字列をパディングするインターフェース
Formater paddingFormater = new PaddingFormater();
//パディングインターフェースを使用
Printer paddingPrinter = new Printer(paddingFormater);
// "Complete Padding"が出力される。
paddingPrinter.println("Argument");
//文字列を分割するインターフェース
Formater splitFormater = new SplitFormater();
//スプリットインターフェースを使用
Printer splitPrinter = new Printer(splitFormater);
//"Complete Split"が出力される。
splitPrinter.println("Argument");
}
}
はい。コード長いですね。
関数内でクラス定義すんなとか言われそうですが、それはすまん。
なんて前置きはさておき上から順にコードを見ていきましょう。
PaddingFormaterクラス と SplitFormaterクラス はimplements Formaterによりformat関数を内包しています
この時点で小難しいので簡単にいうとこの二つのクラスはFormaterで、format関数を持っています。
その下の処理では各インスタンスを生成してPrinterに代入しています。
何となく見えてきましたね。今度はクラス図で見てみましょう。
うーーんわかりやすい。
大体理解出来ましたでしょうか。
なーんでぇ〜と初めは思うかもしれませんが、普段皆さんが使用している標準APIでも同じ事をしております。
文面でinterfaceの必要性を説くには少し厳しいものがあるので、理解を進めたい方はGofのデザインパターンなどを勉強してみる事をオススメします。
#まとめ
今回はオブジェクト指向で頻出のinterfaceを勉強しました。
理解出来ましたでしょうか。理解出来ましたね。
三大要素である多様性、カプセル化、継承。これらは一朝一夕で身につくものではありません。
今はフレームワークなどによりオブジェクト指向に触れる機会が減ってきておりますが、是非ご自身でバッチ処理などを作成し理解を深めていきましょう!!
以上、
それではまた次回の記事でお会いしましょう😊