アクセス修飾子とは(public / private / protected)
TypeScriptでは、クラスのプロパティやメソッドに アクセス制御(カプセル化) を行うために、
以下の3つのアクセス修飾子が使えます:
修飾子 | アクセス範囲 |
---|---|
public |
どこからでもアクセス可能(デフォルト) |
private |
クラス内からのみアクセス可能 |
protected |
クラス内とそのサブクラスからアクセス可能 |
✅ public(パブリック)
class User {
public name: string;
constructor(name: string) {
this.name = name;
}
public greet() {
console.log(`Hello, ${this.name}`);
}
}
const user = new User("Alice");
console.log(user.name); // ✅ OK
user.greet(); // ✅ OK
- 明示的に書かなくても
public
がデフォルト - 外部から自由にアクセス可能
🔐 private(プライベート)
class BankAccount {
private balance: number = 0;
deposit(amount: number) {
this.balance += amount;
}
getBalance(): number {
return this.balance;
}
}
const account = new BankAccount();
// account.balance = 10000; // ❌ エラー: privateなので外からアクセス不可
account.deposit(1000);
console.log(account.getBalance()); // ✅ OK
- 外部から直接プロパティやメソッドにアクセスできない
- 情報隠蔽(カプセル化)を実現する
🛡️ protected(プロテクテッド)
class Animal {
protected name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
bark() {
console.log(`${this.name} says: ワン!`);
}
}
const dog = new Dog("ポチ");
dog.bark(); // ✅ OK
// console.log(dog.name); // ❌ エラー: protectedは外部から参照不可
- サブクラスからはアクセスできるが、インスタンスからは不可
- 継承を前提とした設計でよく使う
🧾 まとめ
修飾子 | クラス内部 | 継承クラス | 外部からアクセス | 用途例 |
---|---|---|---|---|
public |
✅ | ✅ | ✅ | ユーザー名など公開情報 |
private |
✅ | ❌ | ❌ | パスワードや内部データ |
protected |
✅ | ✅ | ❌ | サブクラスにだけ開放したい情報 |
✅ クラス設計での使い分けのコツ
- 外部から自由に使わせたい →
public
- クラスの中だけで完結する処理・状態 →
private
- 継承されることを前提に、部分的に開放したい →
protected
「アクセスできる場所」を制限することで、設計の意図や責任の範囲を明確にでき、保守性・安全性が高まります。