🧑‍💻 Spring Framework 講座【第2回】業務システム設計の土台!〜Javaオブジェクト指向の基本を再確認〜

docs

前回は、Spring Frameworkの立ち位置を確認し、開発環境の準備を行いました。無事に動作したでしょうか?

今回からはいよいよ、Springを本格的に学んでいくための土台固めとして、「Javaのオブジェクト指向」を再確認します。業務システム開発において、オブジェクト指向の考え方は極めて重要です。Springの根幹である**DI(依存性の注入)**を理解するためにも、しっかり押さえておきましょう。

1. オブジェクト指向の基本理念:プログラムを「モノ」として捉える

オブジェクト指向とは、プログラムを現実世界にある「モノ(オブジェクト)」の集まりとして設計する考え方です。

例えば、自動車という**モノ(オブジェクト)を考えると、色や速度といったデータ(状態)と、走る、止まるといった操作(振る舞い)**を持っています。

オブジェクト指向では、この「データ」と「操作」をセットにしたものが「クラス」です。

2. クラスとオブジェクト(インスタンス)

2-1. クラス(設計図)の定義

クラスは、オブジェクトを作るための設計図です。

Java

// Personクラス(人間の設計図)を定義
public class Person {
    // データ(状態):フィールド
    String name;
    int age;

    // 操作(振る舞い):メソッド
    public void greet() {
        System.out.println("こんにちは、私の名前は" + name + "です。");
    }
}

2-2. オブジェクト(実体)の生成

設計図(クラス)があっても、それだけでは何も動きません。設計図をもとに**実体(オブジェクトまたはインスタンス)**をメモリ上に作り出す必要があります。

オブジェクトを作るには new 演算子を使います。

Java

// mainメソッド内で実行
public class MainApplication {
    public static void main(String[] args) {
        // Personクラスのオブジェクトを生成(インスタンス化)
        Person taro = new Person();
        Person hanako = new Person();

        // 状態(データ)を設定
        taro.name = "太郎";
        taro.age = 30;
        
        hanako.name = "花子";
        hanako.age = 25;

        // 振る舞い(メソッド)を実行
        taro.greet();    // 出力: こんにちは、私の名前は太郎です。
        hanako.greet();  // 出力: こんにちは、私の名前は花子です。
    }
}

3. 継承(Inheritance):共通機能を再利用する

継承とは、あるクラスが持つ機能や性質を、別のクラスが受け継ぐ仕組みです。共通の機能を親クラスにまとめ、コードの重複を防ぎます。

Java

// 親クラス:Animal(動物)
class Animal {
    public void eat() {
        System.out.println("食べ物を食べます。");
    }
}

// 子クラス:Dog(Animalの機能を受け継ぐ)
// extendsキーワードを使って継承する
class Dog extends Animal {
    public void bark() {
        System.out.println("ワンワン!");
    }
}

3-1. 継承の利用

Dogクラスは、親であるAnimalクラスのeat()メソッドを自動的に持っています。

Java

public class InheritanceExample {
    public static void main(String[] args) {
        Dog pochi = new Dog();
        pochi.bark(); // Dog独自のメソッド
        pochi.eat();  // Animalから継承したメソッド
    }
}

/* 実行結果
ワンワン!
食べ物を食べます。
*/

4. インターフェース(Interface):役割の定義

業務システムでは、「この部品はこういう機能(メソッド)を必ず持っていなければならない」という役割を明確に定義することが重要です。この役割を定義するのが「インターフェース」です。

  • インターフェースは**「契約」**のようなもので、メソッドの定義(名前や引数、戻り値)だけを記述します。
  • インターフェースを実装するクラスは、そのインターフェースで定義されたすべてのメソッドの中身(処理)を必ず記述しなければなりません。

Java

// インターフェースの定義:Printableという役割
interface Printable {
    // 契約:このメソッドを必ず実装すること
    void printDocument(); 
}

// PrinterクラスはPrintableの役割を実装する(implementsキーワード)
class SimplePrinter implements Printable {
    @Override // 実装していることを示すアノテーション
    public void printDocument() {
        System.out.println("A4用紙に印刷しました。");
    }
}

4-1. インターフェースの重要性(Springへ繋がる)

インターフェースを使うことで、私たちは**「どのようなプリンタ(実装クラス)が使われているか」を意識せず、「印刷(Printableの役割)ができる」という点だけ**に注目してプログラムを組むことができます。

この「実装の詳細から切り離して、役割(インターフェース)に注目する」という考え方が、SpringのDI(依存性の注入)の核心に繋がります。

✅ 本日のまとめ

  • クラスはモノの設計図であり、newすることでオブジェクト(実体)になる。
  • 継承(extends)により、親クラスの共通機能を再利用できる。
  • インターフェース(interface / implements)は、クラスが持つべき**役割(契約)**を定義する。業務システムの柔軟な設計に不可欠。

🔔 次回予告

今回、インターフェースが柔軟な設計に繋がるという話をしましたが、Javaのオブジェクト指向には、あと二つ重要なポイントが残っています。それが「例外処理」と「コレクション」です。

特に、業務システムではユーザーからの予期せぬ入力や、ファイルが見つからないなどの「エラー」への対応(例外処理)が非常に重要になります。

次回:【第3回】Java文法の再確認(例外処理とコレクション) で、安全で効率的なシステム開発のための基本を学びます。お楽しみに!

コメント

タイトルとURLをコピーしました