"private", "public", "protected", "internal" の違い
Angular コンポーネントにおける "private" と "public"
"private" 修飾子を付けたプロパティやメソッドは、コンポーネントクラス内でのみアクセスできます。つまり、コンポーネントテンプレートや他のコンポーネントからはアクセスできません。
例:
export class MyComponent {
private _count = 0;
increment() {
this._count++;
}
}
上記の例では、_count
プロパティと increment
メソッドは private
修飾子で宣言されています。そのため、コンポーネントテンプレート内でこれらのプロパティやメソッドにアクセスすることはできません。
<h1>{{ _count }}</h1>
<button (click)="increment()">カウントアップ</button>
"private" 修飾子をアクセス修飾子として使用する主な利点は、コードのエンカプセレーションとデータ隠蔽を実現できることです。コンポーネント内部のデータとロジックを外部から保護し、意図しない変更を防ぐことができます。
export class MyComponent {
public count = 0;
increment() {
this.count++;
}
}
<h1>{{ count }}</h1>
<button (click)="increment()">カウントアップ</button>
"public" 修飾子をアクセス修飾子として使用する主な利点は、コンポーネント間のデータ共有とコードの再利用性を向上させることができることです。
まとめ
"private" と "public" アクセス修飾子を適切に使用することで、コードのエンカプセレーション、データ隠蔽、データ共有、コードの再利用性を向上させることができます。
一般的なガイドライン:
- 内部実装の詳細を隠蔽したい場合は、プロパティやメソッドを
private
にします。 - コンポーネント間で共有したいデータや、外部から呼び出したいメソッドは、
public
にします。 - 必要に応じて、
protected
アクセス修飾子も使用できます。protected
修飾子を付けたプロパティやメソッドは、コンポーネントクラスとそのサブクラスからのみアクセスできます。
これらのアクセス修飾子を適切に使用することで、Angular コンポーネントをより読みやすく、保守しやすいコードにすることができます。
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
private _count = 0;
public get count(): number {
return this._count;
}
public increment(): void {
this._count++;
}
}
<h1>{{ count }}</h1>
<button (click)="increment()">カウントアップ</button>
代わりに、count
という public
ゲッタープロパティを提供することで、コンポーネントテンプレートから _count
プロパティの値を取得できるようにしています。
increment
メソッドも public
修飾子で宣言されているため、コンポーネントテンプレートから呼び出すことができます。
- コンポーネント間のデータ共有:
@Input
と@Output
デコレータと組み合わせて、public
プロパティやメソッドを使用することで、コンポーネント間でデータやイベントを共有することができます。 - コードの再利用:
public
メソッドを使用して、共通の機能をコンポーネント間で再利用することができます。
"private" と "public" 以外のアクセス修飾子
- protected: コンポーネントクラスとそのサブクラスからのみアクセスできます。
- internal: 同じモジュール内のファイルからのみアクセスできます。
これらのアクセス修飾子は、より細かいアクセス制御が必要な場合に使用できます。
例
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
protected _count = 0;
public get count(): number {
return this._count;
}
public increment(): void {
this._count++;
}
}
このコードでは、_count
プロパティは protected
修飾子で宣言されています。
そのため、AppComponent
クラスとそのサブクラスからのみアクセスできます。
コンポーネントテンプレートや他のコンポーネントからは、_count
プロパティに直接アクセスすることはできません。
アクセス修飾子以外にも、以下の方法を使用してコードのアクセスを制御できます。
- モジュール: コードをモジュールに分割することで、異なるモジュール間のアクセスを制御できます。
- インターフェース: インターフェースを使用して、コード間の公開インターフェースを定義できます。
- 抽象クラス: 抽象クラスを使用して、コード間の共通の機能を定義できます。
これらの方法を組み合わせることで、より柔軟なアクセス制御を実現することができます。
"private" と "public" は、Angular コンポーネントにおけるプロパティやメソッドのアクセス制御の基本的なアクセス修飾子です。
必要に応じて、protected
や internal
などの他のアクセス修飾子や、モジュール、インターフェース、抽象クラスなどの方法を組み合わせて、より細かいアクセス制御を実現することができます。
typescript angular