TypeScriptアクセス演算子:public, private, protectedの使い方

2023.05.04 に公開記事は 3 分で読めます
サムネイル画像

こんにちは!

この記事では TypeScript のアクセス演算子について分かりやすく解説していきます。

アクセス演算子とは?

まずはアクセス演算子について簡単に説明します。

アクセス演算子はクラスのメンバー(プロパティやメソッド)のアクセス制限を指定するために使用されます。
TypeScript では public private protected の 3 つのアクセス演算子があります。

それぞれのアクセス演算子がどのような役割を果たすのか、具体的なコード例を交えて紹介します!

public

まず、public はメンバーが どこからでもアクセス可能 であることを示します。

class Animal {
  public name: string;

  constructor(name: string) {
    this.name = name;
  }
}

const dog = new Animal("Dog");
console.log(dog.name); // "Dog"

上記のコードでは Animal クラスの name プロパティが public と指定されています。
そのため dog インスタンスから name プロパティにアクセスできます。

private

次に private はメンバーが クラス内でのみアクセス可能 であることを示しています。

class Animal {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }

  public getName(): string {
    return this.name;
  }
}

const dog = new Animal("Dog");
console.log(dog.getName()); // "Dog"
console.log(dog.name); // エラー

上記の例では Animal クラスの name プロパティが private と指定されています。
そのため dog インスタンスから直接 name プロパティにアクセスするとエラーが発生します。

その代わりにコード中にあるように getName メソッドを使用して name プロパティにアクセスすることができます。

protected

最後に protected はメンバーが クラス内およびサブクラス内でのみアクセス可能 であることを示します。

class Animal {
  protected name: string;

  constructor(name: string) {
    this.name = name;
  }
}

class Dog extends Animal {
  public bark(): void {
    console.log(`Woof! My name is ${this.name}!`);
  }
}

const dog = new Dog("Dog");
dog.bark(); // "Woof! My name is Dog!"

上のコードでは Animal クラスの name プロパティが protected と指定されています。

そのため Dog クラス(Animal クラスのサブクラス)内で name プロパティにアクセスすることができます。
ただ、dog インスタンスから直接 name プロパティに以下のようにアクセスしようとするとエラーとなります。

console.log(dog.name); // エラー

このように protected アクセス演算子を使うことで、クラスの継承関係を適切に保ちながら不要な外部アクセスを制限することができるわけですね。

まとめ

illust

TypeScriptのアクセス演算子は public private protected の3種類

  • public:メンバーがどこからでもアクセス可能
  • private:メンバーがクラス内でのみアクセス可能
  • protected:メンバーがクラス内およびサブクラス内でのみアクセス可能

アクセス演算子をうまく使い分けることで、コードの安全性と可読性を向上させることができます!


SHARE