実践で使うインターフェース
インターフェースを型として使い、メソッドに渡し、実装を簡単に入れ替えます。柔軟なコードのための小さなパターンを練習します。
「実践で使うインターフェース」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。
概要
インターフェースの実践: 能力を型として扱い、呼び出し側を具象クラスから独立させます。インターフェースをメソッドに渡したり、リストに格納したり、必要に応じて別の実装に置き換えたりできます。
インターフェースをパラメーターにする
メソッドがインターフェース型をパラメーターとして受け取ると、柔軟性が高まります:
- 呼び出し側のコードを変更せずに済みます。
- 異なるクラスが同じ契約を実装して利用できます。
- テストではFakeやStubを差し替えて、すばやく試せます。
コード: Printableの機能
このメソッドは具体的なクラスではなく、Printableという契約を使用しているため、実装を変更しても呼び出し側のコードは変わりません。
public class Main {
// 1) Define a tiny capability
static interface Printable { void print(); }
// 2) Two implementations
static class TextDoc implements Printable {
public void print() { System.out.println("[TextDoc] Printing text pages"); }
}
static class Photo implements Printable {
public void print() { System.out.println("[Photo] Printing a photo"); }
}
// 3) A method that depends on capability, not class
static void runJob(Printable p) {
p.print(); // caller does not care which class it is
}
public static void main(String[] args) {
runJob(new TextDoc());
runJob(new Photo());
}
}
インターフェースを戻り値の型にする
ファクトリメソッドがインターフェースを返すことがあります。呼び出し側に見えるのは能力だけで、実際のクラスを知る必要はありません。これにより依存関係が減り、モジュール性が高まります。
コード: Formatterを使ったStrategy
同じメソッドが、異なるFormatterの実装で動作します。クラスを変更せずに振る舞いを変更できました。
public class Main {
// Strategy: different ways to format text
static interface Formatter { String format(String s); }
static class UpperFormatter implements Formatter {
public String format(String s) { return s.toUpperCase(); }
}
static class LowerFormatter implements Formatter {
public String format(String s) { return s.toLowerCase(); }
}
// Uses any Formatter
static String show(String title, Formatter f) {
return title + " -> " + f.format(title);
}
public static void main(String[] args) {
System.out.println(show("Hello", new UpperFormatter()));
System.out.println(show("Hello", new LowerFormatter()));
}
}
コード:インターフェース一覧
配列やリストの要素型にはインターフェース型を指定できます。ループは同じ呼び出しを行い、各要素が自身の実装を実行します。
public class Main {
static interface Task { void run(); }
static class EmailTask implements Task { public void run(){ System.out.println("Send email"); } }
static class ReportTask implements Task { public void run(){ System.out.println("Generate report"); } }
static class CleanupTask implements Task { public void run(){ System.out.println("Clean temp files"); } }
public static void main(String[] args) {
Task[] queue = { new EmailTask(), new ReportTask(), new CleanupTask() };
for (int i = 0; i < queue.length; i = i + 1) {
queue[i].run(); // same call, different behavior
}
}
}
インターフェース練習チェック
クイックチェック:「インターフェースに対してプログラミングする」と便利なのはなぜですか?
まとめ
まとめ:パラメーター、戻り値、コレクションにインターフェース型を使うと、コードが柔軟になります。実装を差し替えたり、テストでモックオブジェクトを使ってすばやく試したりできます。
よくある質問
「実践で使うインターフェース」レッスンは無料ですか?
はい。「実践で使うインターフェース」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。
「実践で使うインターフェース」で何を学びますか?
インターフェースを型として使い、メソッドに渡し、実装を簡単に入れ替えます。柔軟なコードのための小さなパターンを練習します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「実践で使うインターフェース」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 実践で使うインターフェース
- ジェネリクスの基礎(T、型推論)
- ジェネリックメソッドとジェネリッククラス