オブジェクト指向プログラミング

コンストラクタ こんすとらくた

オブジェクト指向クラスインスタンス初期化メソッドnew演算子
コンストラクタについて教えて

簡単に言うとこんな感じ!

コンストラクタは「オブジェクトが生まれるときに自動で呼ばれる準備係」だよ!家を建てるときに最初に基礎工事をするみたいに、オブジェクトを作ったときに名前や初期値をセットしてくれる特別なメソッドなんだ。


コンストラクタとは

コンストラクタ(Constructor)とは、オブジェクト指向プログラミングにおいて、クラスからオブジェクト(インスタンス)を生成するときに自動的に呼び出される特別なメソッドのことです。「構築する」という意味の英語 construct が語源で、オブジェクトの「初期化」を担います。

たとえば「社員」クラスがあったとして、new 社員("田中", "営業部") のように記述すると、コンストラクタが呼ばれて名前や部署などの初期値が自動的にセットされます。開発者が手動で1つずつ値を入れる手間を省き、オブジェクトを作ると同時に必ず正しい初期状態にする仕組みです。

コンストラクタはほぼすべてのオブジェクト指向言語(JavaPython・C++・JavaScriptRubyなど)に存在し、クラス設計の基本中の基本とも言える概念です。システム発注の場面では直接触れることは少ないですが、「なぜオブジェクト指向が便利なのか」を理解する上でとても重要な概念です。


コンストラクタの仕組みと特徴

コンストラクタには、通常のメソッドとは異なるいくつかの特徴があります。

特徴内容
自動呼び出しnew でオブジェクトを生成したとき自動実行される
メソッド名多くの言語でクラス名と同じ(Pythonは __init__
戻り値なし値を返すのではなく、オブジェクト自身を初期化する
複数定義可引数の数や型を変えて複数用意できる(オーバーロード)
省略可能書かなければ自動で「何もしないコンストラクタ」が用意される

覚え方:「新築のチェックリスト」

コンストラクタは新しい家(オブジェクト)を建てたとき(new)に必ず行われる最初の点検作業、とイメージするとわかりやすいです。「電気はつながってるか?水道は通ってるか?」のように、初期値(フィールド)が正しくセットされているかを保証してくれます。

言語ごとのコンストラクタ比較

【Java】
class Employee {
    String name;
    Employee(String name) {   // ← コンストラクタ
        this.name = name;
    }
}

【Python】
class Employee:
    def __init__(self, name):  # ← コンストラクタ相当
        self.name = name

【JavaScript】
class Employee {
    constructor(name) {        # ← コンストラクタ
        this.name = name;
    }
}

歴史と背景

  • 1960年代 — Simula 67(世界初のオブジェクト指向言語)でクラスとオブジェクト生成の概念が生まれ、コンストラクタの原型となる仕組みが登場
  • 1979年 — Bjarne Stroustrup が C++ を開発。コンストラクタ(とデストラクタ)を明示的な言語機能として定義し、現在の形の礎を作る
  • 1995年 — Java が登場。コンストラクタをオーバーロード(引数違いで複数定義)できる仕様が広く普及
  • 1990年代〜2000年代 — Python・Ruby・C# など多くのモダン言語がそれぞれの形でコンストラクタを採用
  • 現在TypeScriptKotlinSwift など新しい言語でも引き続きコンストラクタは基本機能として維持されており、オブジェクト指向の不変の構成要素となっている

クラス・インスタンスとコンストラクタの関係

コンストラクタを理解するには、クラス・インスタンス・コンストラクタの三者の関係を整理することが重要です。

クラス(設計図) コンストラクタ Employee(name, dept) フィールド: name フィールド: dept メソッド: greet() メソッド: getInfo() new Employee() ↓ コンストラクタ発動 name, dept に初期値 をセットして完成! new×3 インスタンスA name: "田中" dept: "営業部" インスタンスB name: "鈴木" dept: "開発部" インスタンスC name: "佐藤" ... ポイント 同じクラスから 何個でも生成可能! それぞれ独立した 初期値を持つ

コンストラクタ vs 通常のメソッドの違い

比較項目コンストラクタ通常のメソッド
呼ばれるタイミングnew 時に自動明示的に呼び出す
名前クラス名と同じ(言語による)自由につけられる
戻り値なし(void相当)任意の型・値を返せる
目的オブジェクトの初期化処理・計算・操作など
省略省略可(デフォルトが用意される)省略=存在しない

関連用語

  • クラス — オブジェクトの設計図。コンストラクタが定義される場所
  • インスタンス — クラスから new で生成された実体。コンストラクタで初期化される
  • オブジェクト指向 — クラス・インスタンス・コンストラクタを含む設計思想全体
  • メソッド — クラスに定義された処理。コンストラクタも特殊なメソッドの一種
  • デストラクタ — コンストラクタの対義語。オブジェクトが破棄されるときに呼ばれる
  • カプセル化 — コンストラクタを通じて内部データを隠蔽するオブジェクト指向の原則
  • 継承 — 親クラスのコンストラクタを子クラスが受け継ぐ仕組み(super() 呼び出し)