コンストラクタ(Constructor)とは、プログラミングにおいて、クラスからオブジェクトを作り出す際に自動的に呼び出される、初期化専用の特別な処理のことです。オブジェクトが使える状態になる前に必要な準備を整える役割を持ち、多くのオブジェクト指向言語に共通する仕組みです。
現実世界に例えると、コンストラクタは新しい社員を迎える際の入社手続きのようなものです。名札を作り、机を用意し、必要な備品を揃えるといった準備を済ませてから、実際の業務を始めてもらうのと同じように、オブジェクトも使われる前に必要な下準備が行われます。
コンストラクタの役割
コンストラクタの主な役割は、オブジェクトが持つべきデータ(メンバー変数)に、初期値を設定することです。例えば「社員」を表すオブジェクトを作る際、コンストラクタの中で氏名や入社日といった項目に値を入れておくことで、そのオブジェクトはすぐに使える状態になります。
コンストラクタの特徴
コンストラクタには、クラスと同じ名前が付けられ、戻り値を指定しないという特徴があります。また、オブジェクトを新しく作成する瞬間に自動的に呼び出されるため、プログラマーが明示的にコンストラクタを呼び出す処理を書く必要はありません。
デフォルトコンストラクタ
クラスの中に自分でコンストラクタを1つも定義しなかった場合、多くの言語では何も処理を行わない「デフォルトコンストラクタ」が自動的に用意されます。特別な初期化が不要なシンプルなクラスであれば、このデフォルトの仕組みだけで十分な場合もあります。
引数付きコンストラクタ
実際の開発では、オブジェクトを作る際に外部から値を渡し、その値をもとに初期化を行う「引数付きコンストラクタ」がよく使われます。「社員」オブジェクトを作る際に氏名を引数として渡せば、作成と同時にその氏名が設定された状態でオブジェクトが完成します。
デストラクタとの違い
| 項目 | コンストラクタ | デストラクタ |
|---|---|---|
| 呼ばれるタイミング | オブジェクトの作成時 | オブジェクトの破棄時 |
| 主な役割 | 初期化 | 後片付け |
コンストラクタが「入社手続き」だとすれば、デストラクタは「退職時の返却・清算」に近い役割を果たします。
代表的な言語での書き方
| 言語 | コンストラクタの書き方 |
|---|---|
| Java | クラス名と同じ名前のメソッドとして定義 |
| Python | 「__init__」という決まった名前のメソッドで定義 |
| C++ | クラス名と同じ名前のメンバー関数として定義 |
メリット
コンストラクタを使うことで、初期化のし忘れによる不具合を防ぎ、常に正しい状態のオブジェクトだけを作り出せるようになります。オブジェクトが完成した時点ですでに必要なデータが揃っているため、後から値を1つずつ設定し忘れるといったミスを避けられます。
注意点
一方で、コンストラクタの中に複雑な処理を詰め込みすぎると、オブジェクトの作成に時間がかかったり、意図を追いづらいコードになったりすることがあります。初期化に必要な最小限の処理にとどめ、それ以外の重い処理は別のメソッドに分けておくことが望ましいとされています。
あわせて知っておきたい用語
- クラス(Class):
オブジェクトの設計図にあたる、プログラミングの基本単位です。 - オブジェクト(Object):
クラスをもとに、コンストラクタによって作り出される実体です。 - デストラクタ(Destructor):
オブジェクトが破棄される際に呼び出される、後片付け用の処理です。 - Java(ジャバ):
コンストラクタの仕組みを持つ、代表的なオブジェクト指向言語です。


コメント