【JavaScript】オブジェクト、クラス、コンストラクタ、インスタンス、インターフェースの違い!

JavaScriptでのオブジェクト指向プログラミングを効果的に行うためには、オブジェクトクラスコンストラクタインスタンス、およびインターフェースという概念を理解することが非常に重要です。

この記事では、これらの用語について、サンプルコードを用いてわかりやすく解説します。

オブジェクトとは

オブジェクトとは

オブジェクトは、プロパティ(属性)とメソッド(動作)を持つデータ構造です。オブジェクトを使うと、関連する情報を一つにまとめ、現実世界の事象やデータをプログラム内で表現できます。

const person = {
  name: 'Alice',
  age: 25,
  greet: function () {
    console.log(`Hello, my name is ${this.name}.`);
  },
};
console.log(person.name); // Alice
console.log(person.age); // 25
person.greet(); // Hello, my name is Alice.

この例では、personオブジェクトであり、nameageがプロパティ、greetがメソッドです。オブジェクトはオブジェクトリテラルとして直接定義することができます。

オブジェクトのポイント

  • プロパティ(属性)とメソッド(動作)を持つデータ構造
  • プロパティ: オブジェクトの属性を表す(例: name, age
  • メソッド: オブジェクトの動作を表す(例: greet

補足

JavaScriptにおけるオブジェクトは、クラスから生成されたインスタンスの一つでもありますが、上記のサンプルコードのように、クラスを使わずに直接オブジェクトリテラルで定義することもできます。

クラスとは

クラスとは

クラスは、インスタンスを作成するための設計図です。インスタンスのプロパティ(属性)やメソッド(動作)を定義します。

クラスから生成された具体的なオブジェクトインスタンスです(後ほどインスタンスについて説明します)

クラスで、共通のプロパティやメソッドを一括して定義することで、複数の似たインスタンスを簡単に作成できるようになります。JavaScriptでは、class構文を使ってクラスを定義します。

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

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

この例では、Personクラスが定義され、クラス内でnameageのプロパティを持つインスタンスを作成できます。

クラスのポイント

  • クラスインスタンスを生成するためのテンプレート。
  • クラスの中には、インスタンスのプロパティ(属性)とメソッド(動作)を定義できる。

コンストラクタとは

コンストラクタとは

コンストラクタは、クラスから新しいインスタンスを作成する際に呼び出されるメソッドです。クラス内でconstructorという名前で定義され、クラスから新しいインスタンスが生成される際に自動的に呼び出されます。コンストラクタ内で、インスタンスの初期設定を行います。

const person1 = new Person('Bob', 30);
console.log(person1.name); // Bob
console.log(person1.age); // 30
person1.greet(); // Hello, my name is Bob.

この例では、Personクラスコンストラクタが呼び出され、person1という新しいインスタンスが生成されます。constructor内で、nameageの初期値が設定されます。

コンストラクタのポイント

  • コンストラクタインスタンスを初期化するために使う。
  • newキーワードでクラスからインスタンスを作成すると、自動的にコンストラクタが呼び出される。

インスタンスとは

インスタンスとは

インスタンスは、クラスから生成された具体的なオブジェクトです。クラスは設計図であり、インスタンスはその設計図を基に作られたオブジェクトの実体です。newキーワードを使って、生成されたオブジェクトがそのクラスインスタンスです。

const person2 = new Person('Charlie', 28);
console.log(person2.name); // Charlie
console.log(person2.age); // 28
person2.greet(); // Hello, my name is Charlie.

const person3 = new Person('Daisy', 22);
console.log(person3.name); // Daisy
console.log(person3.age); // 22
person3.greet(); // Hello, my name is Daisy.

person2person3は、どちらもPersonクラスから作成されたインスタンスですが、異なるプロパティを持っています。クラスは共通のテンプレートとして機能しますが、各インスタンスはそれぞれ異なるデータを持つことが可能です。

インスタンスのポイント

  • クラスから生成された具体的なオブジェクトインスタンスと呼ぶ。
  • 複数のインスタンスを作成し、それぞれ異なるプロパティを持たせることができる。

インターフェースとは

JavaScriptには直接的なインターフェースの概念はありませんが、TypeScriptのような型を扱う言語では、インターフェースを使ってインスタンスの構造を定義することができます。インターフェースは、クラスが持つべきプロパティやメソッドを事前に定義し、実装を強制するために使用します。

interface PersonInterface {
  name: string;
  age: number;
  greet(): void;
}

class Person implements PersonInterface {
  name: string;
  age: number;

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

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

この例では、PersonInterfaceが定義され、そのインターフェースを実装したPersonクラスは、nameageプロパティとgreetメソッドを持つことが強制されています。

インターフェースのポイント

  • TypeScriptのインターフェースは、クラスインスタンスが持つべきプロパティやメソッドを定義する。
  • JavaScriptではインターフェースの概念がないため、型の存在はチェックできないが、TypeScriptを使うことでそれが可能になる。

本記事のまとめ

この記事では、JavaScriptにおける重要なオブジェクト指向の概念であるオブジェクトクラスコンストラクタインスタンス、およびインターフェースについて解説しました。

  • オブジェクト
    • プロパティとメソッドを持つデータ構造
  • クラス
    • インスタンスを作成するための設計図
  • コンストラクタ
    • クラスからインスタンスを作成する際に呼び出されるメソッド
  • インスタンス
    • クラスから作られた具体的なオブジェクト
  • インターフェース
    • クラスインスタンスが持つべきプロパティやメソッドを定義する型(TypeScript)

お読み頂きありがとうございました。