アクセス修飾子とは(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

「アクセスできる場所」を制限することで、設計の意図や責任の範囲を明確にでき、保守性・安全性が高まります。


コメントを残す 0

Your email address will not be published. Required fields are marked *