Java オブジェクト指向

Java コンストラクタをprivateにするとき

投稿日:

こちらを読むと

  • コンストラクタをprivateにすべき事例がわかります
  • 記事の所要時間は10分です

結論

コンストラクタをprivateにすべきときは、以下です。

  • 定数クラス
  • ユーティリティクラス
  • シングルトン

詳細に説明していきます。

コンストラクタおさらい

コンストラクタとは、クラスからインスタンスを生成するときに呼び出すメソッドのことです。

クラスにより、インスタンスの”型”を1つ定義しておき、そこから複数のインスタンスを作ることができます。

クラスからインスタンス生成

コンストラクタは通常はpublic

コンストラクタは通常、publicにして、外部からアクセス可能にします。
なぜかというと、そのクラス自体で完結するシステムはほとんど無く、別の利用者(クラス)からクラスを使うことが多いためです。

別の利用者から使うためには、利用者側からインスタンスを生成する必要があり、そのためにはコンストラクタをpublicなどで公開する必要があります。

利用者側からインスタンス生成して使う

privateコンストラクタとは

ではどういうときに、コンストラクタをprivateにするのでしょうか?

そのケースは大きく2つに分かれると思います。

  1. インスタンスを生成する必要がないケース
  2. 生成できるインスタンスの数を限定したいケース

それぞれ説明していきます。

インスタンスを生成する必要がないケース

以下のクラスをみてください。こちらは定数クラスで、メンバ変数やメソッドは存在せず、持っているものは定数のみです。

次にこちらのクラスを見てください。こちらはユーティリティクラスで、staticなメソッドのみを持っています。

2つとも、インスタンスを生成する必要がありません。例えば、以下のように呼び出すことができますね。

生成できるインスタンスの数を限定したいケース

有名なシングルトンのケースです。シングルトンでなくても、インスタンスを2つしか作れない、3つしか作れないなど、数を限定したいケースでもよいです。

Godは1つしか存在せず、外部から自由に作られるとまずいので、コンストラクタをprivate にしておく必要があります。

まとめ

コンストラクタをprivateにすべきときが分かりました。大きく以下の3点です。

  • 定数クラス
  • ユーティリティクラス
  • シングルトン

定数クラスやユーティリティクラスのインスタンスを生成できても実害はないですが、意味のないことなので、private コンストラクタで禁止するように強制しましょう。

筆者はJavaエンジニアで、日ごろからJavaなどプログラミングの有益な情報を発信しているので、よかったらTwitterをフォローしてみてください。



-Java, オブジェクト指向

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Dependency Injection(DI) パターン

Table of Contents こちらを読むと結論Dependency Injection(DI)とはDIではない例DIを使わないと修正範囲が大きくなるDIの例DI考察まとめReference こ …

Java ジェネリクスクラス

Table of Contents こちらを読むとジェネリクスとはジェネリクス クラスObjectクラスで扱えばよいのでは?まとめReference こちらを読むと Javaのジェネリクス クラスの定 …

staticファクトリメソッドの利点[Java]

Table of Contents こちらを読むと結論staticファクトリメソッドとはstaticファクトリメソッドの例staticファクトリメソッドの利点1.名前をつけることができる2.オブジェク …