TypeScriptでクラスを使う|継承とアクセス修飾子

先生

TypeScriptのクラスをマスターして、より効率的で安全なコードを書こう!継承とアクセス修飾子の使い方も解説。

TypeScriptにおけるクラスの基本

TypeScriptは、JavaScriptに静的型付けを加えた言語であり、大規模なアプリケーション開発に適しています。クラスは、オブジェクト指向プログラミングの重要な概念であり、データ(プロパティ)と処理(メソッド)をまとめるための設計図です。

TypeScriptでクラスを定義するには、classキーワードを使用します。以下は、基本的なクラスの例です。

class Animal {
  name: string;

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

  sayHello() {
    console.log(Hello, my name is ${this.name});
  }
}

この例では、Animalというクラスを定義しています。nameというプロパティと、constructorというコンストラクタ、そしてsayHelloというメソッドを持っています。

constructorは、クラスのインスタンスが作成されるときに実行される特別なメソッドです。この例では、nameプロパティを初期化しています。

sayHelloメソッドは、コンソールにメッセージを出力します。クラスのインスタンスを作成して、このメソッドを呼び出すことができます。

const animal = new Animal("Dog");
animal.sayHello(); // Hello, my name is Dog

このように、TypeScriptのクラスを使うことで、コードの構造化と再利用性を高めることができます。

TypeScriptの継承

継承は、既存のクラス(親クラスまたはスーパークラス)のプロパティとメソッドを新しいクラス(子クラスまたはサブクラス)が引き継ぐことができる機能です。TypeScriptでは、extendsキーワードを使用して継承を実現します。

class Dog extends Animal {
  breed: string;

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

  bark() {
    console.log("Woof!");
  }
}

この例では、DogクラスはAnimalクラスを継承しています。Dogクラスは、AnimalクラスのnameプロパティとsayHelloメソッドを自動的に持ちます。また、Dogクラスは、独自のプロパティbreedとメソッドbarkも持っています。

super()は、親クラスのコンストラクタを呼び出すために使用されます。この例では、super(name)Animalクラスのコンストラクタを呼び出し、nameプロパティを初期化します。

継承を使うことで、コードの重複を減らし、保守性を高めることができます。

const dog = new Dog("Buddy", "Golden Retriever");
dog.sayHello(); // Hello, my name is Buddy
dog.bark(); // Woof!

アクセス修飾子

TypeScriptでは、クラスのメンバー(プロパティとメソッド)にアクセス修飾子を設定することで、アクセス範囲を制御できます。主なアクセス修飾子は、publicprivateprotectedの3つです。

public:デフォルトのアクセス修飾子です。クラスの外部から自由にアクセスできます。

private:クラスの内部からのみアクセスできます。クラスの外部からはアクセスできません。

protected:クラスの内部および、そのクラスを継承した子クラスからアクセスできます。クラスの外部からはアクセスできません。

class Person {
  public name: string;
  private age: number;
  protected address: string;

  constructor(name: string, age: number, address: string) {
    this.name = name;
    this.age = age;
    this.address = address;
  }

  public sayHello() {
    console.log(Hello, my name is ${this.name}. I am ${this.age} years old.);
  }
}

この例では、nameプロパティはpublicなので、クラスの外部から自由にアクセスできます。ageプロパティはprivateなので、クラスの内部からのみアクセスできます。addressプロパティはprotectedなので、クラスの内部および、Personクラスを継承した子クラスからアクセスできます。

アクセス修飾子を使うことで、データの隠蔽とカプセル化を実現し、コードの安全性を高めることができます。

参考リンク

まとめ

この記事では、TypeScriptにおけるクラスの基本的な使い方、継承、アクセス修飾子について解説しました。クラスを使うことで、コードの構造化と再利用性を高めることができます。継承を使うことで、コードの重複を減らし、保守性を高めることができます。アクセス修飾子を使うことで、データの隠蔽とカプセル化を実現し、コードの安全性を高めることができます。これらの概念を理解することで、より堅牢で保守性の高いTypeScriptアプリケーションを開発できるようになるでしょう。