[Flutter]パブリック/プライベートコンストラクタ
コンストラクタは主に2パターンの考え方がある
パブリックコンストラクタ
定義: MyClass();
説明: これは、MyClassクラスがどこからでもインスタンス化できることを意味し、パブリックコンストラクタです。
プライベートコンストラクタ
定義: MyClass._();
説明: このコンストラクタは、クラス名に._が付いているためプライベートであることを表します。これは、MyClassクラスがそのファイル内でのみインスタンス化されることを意味します。
それぞれのコンストラクタからインスタンス化してみる
パブリックコンストラクタからのインスタンス化
パブリックコンストラクタは、クラスの外部から自由にアクセスしてインスタンスを生成できます。以下に例を示します。
class MyClass {
MyClass(); // パブリックコンストラクタ
}
void main() {
var myInstance = MyClass(); // MyClassのインスタンス化
}
この例では、MyClass()コンストラクタを使用してmain関数内でMyClassのインスタンスを生成しています。
プライベートコンストラクタからのインスタンス化
プライベートコンストラクタは、そのクラスが定義されている同一ファイル内でのみインスタンス化できます。
class MyClass {
// プライベートコンストラクタ
MyClass._();
// クラス内で唯一のインスタンスを保持する静的フィールド
static final MyClass _instance = MyClass._();
// インスタンスへのアクセスを提供する静的ゲッター
static MyClass get instance => _instance;
}
void main() {
var myInstance = MyClass.instance; // MyClassのシングルトンインスタンスの取得
}
この例では、MyClassのインスタンスがプログラム全体で一つだけ存在し、アプリケーションのどこからでも同じインスタンスにアクセスできることを保証します。
プライベートコンストラクタ (MyClass._();)
MyClassのインスタンス化がクラス外部からは不可能になります。
静的フィールド (static final MyClass _instance = MyClass._();)
MyClassの唯一のインスタンスを保持します。
静的ゲッター (static MyClass get instance => _instance;)
クラスの外部から唯一のインスタンスにアクセスできるようになります。
上記のようなコードをシングルトンパターンと呼びます。
▼ゲッターについてはこちらを参照にしてください。
シングルトンパターンとは
シングルトンパターンとは、特定のクラスのインスタンスがプログラム全体で一つだけ存在することを保証するデザインパターンです。このパターンは、グローバルなアクセスポイントを提供し、インスタンスの重複生成を防ぎます。これにより、リソースの効率的な使用や一貫した状態の維持が可能になります。
結論
パブリックコンストラクタはクラス外部からのインスタンス化に使用されます。
プライベートコンストラクタはクラス内部(または特定のパターン、例えばシングルトン)でのみインスタンス化に使用されます。
プライベートコンストラクタが存在する理由は、クラスの外部からの直接的なインスタンス化を防ぐためです。