前回は、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文法の再確認(例外処理とコレクション) で、安全で効率的なシステム開発のための基本を学びます。お楽しみに!


コメント