0Pricing
TypeScript Academy · レッスン

public、private、protected修飾子

修飾子でクラスメンバーへのアクセスを制御します。

「public、private、protected修飾子」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

ようこそ

TypeScriptのアクセス修飾子は、クラスメンバーの可視性を制御します。カプセル化を強制し、意図しない使用を防ぐのに役立ちます。

public:どこからでもアクセス可能

publicがデフォルトです。パブリックメンバーには、クラス内部、サブクラス、外部コードなど、どこからでもアクセスできます。
class Car {
  public brand: string;
  constructor(brand: string) { this.brand = brand; }
}
const c = new Car('Toyota');
console.log(c.brand); // OK

private:クラス内からのみアクセス可能

プライベートメンバーにアクセスできるのは、宣言したクラスの内部だけです。サブクラスや外部コードからはアクセスできません。
class BankAccount {
  private balance: number = 0;
  deposit(n: number) { this.balance += n; }
}
const a = new BankAccount();
// a.balance; // Error!

protected:クラスとサブクラスからアクセス可能

プロテクトメンバーには、宣言したクラスとそのサブクラスの内部からアクセスできますが、外部コードからはアクセスできません。
class Animal {
  protected name: string;
  constructor(name: string) { this.name = name; }
}
class Dog extends Animal {
  bark() { console.log(this.name + ' says woof!'); } // OK
}

コンパイル時のみの強制

TypeScriptのアクセス修飾子は、コンパイル時にのみチェックされます。JavaScriptの出力ではプロパティは引き続きパブリックであり、実行時の強制はありません。

#によるJavaScriptのプライベートフィールド

JavaScriptには、実行時に強制されるネイティブのプライベートフィールドが`#`で用意されています。TypeScriptでは、独自の`private`キーワードと並んでこの構文もサポートされています。
class Counter {
  #count = 0; // runtime private (JavaScript)
  increment() { this.#count++; }
  get value() { return this.#count; }
}

readonly修飾子

readonlyプロパティは、構築時にのみ設定できます。初期化後に変更することはできません。
class User {
  readonly id: number;
  constructor(id: number) { this.id = id; }
}
const u = new User(1);
// u.id = 2; // Error!

修飾子の組み合わせ

同じプロパティでアクセス修飾子とreadonlyを組み合わせることができます。
class Config {
  constructor(
    public readonly host: string,
    private readonly port: number
  ) {}
}

コンストラクターでのprivate

コンストラクターをprivateにすると、外部からのインスタンス化を防げます。代わりに静的ファクトリメソッドを使用します。
class Singleton {
  private static instance: Singleton;
  private constructor() {}
  static getInstance(): Singleton {
    return this.instance ??= new Singleton();
  }
}

protectedコンストラクター

protectedコンストラクターは直接のインスタンス化を防ぎますが、サブクラスから`super()`を通して呼び出すことはできます。
class Base {
  protected constructor(public id: number) {}
}
class Derived extends Base {
  constructor(id: number) { super(id); }
}

アクセス修飾子は実行時のオーバーヘッドを追加しない

TypeScriptはすべての型情報を消去するため、アクセス修飾子がコンパイル後のJavaScriptの出力サイズやパフォーマンスに与える影響はゼロです。

確認問題

クラスメンバーをクラス内部とサブクラスからはアクセス可能にし、外部コードからはアクセスできないようにするアクセス修飾子はどれですか。

まとめ

アクセス可能なメンバーにはpublic(デフォルト)を、カプセル化された内部実装にはprivateを、サブクラス向けのメンバーにはprotectedを使用します。構築後の変更を防ぐにはreadonlyを追加します。

よくある質問

「public、private、protected修飾子」レッスンは無料ですか?

はい。「public、private、protected修飾子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「public、private、protected修飾子」で何を学びますか?

修飾子でクラスメンバーへのアクセスを制御します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「public、private、protected修飾子」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. TypeScriptのクラスとコンストラクター
  2. public、private、protected修飾子
  3. readonlyプロパティとパラメータープロパティ
  4. クラスによるInterfaceの実装
← TypeScript Academyに戻る