クラスについて
JavaScriptにおけるクラスは、オブジェクト指向プログラミングの概念の1つで、共通のプロパティとメソッドを持つオブジェクトの種類を定義するために使用されます。クラスは、オブジェクトの設計図として考えることができます。
JavaScriptのクラスは、ES6(ECMAScript 2015)で導入されました。ES6以前のバージョンでは、クラスを定義する代わりに、関数を使用することが一般的でした。
以下は、JavaScriptのクラスの基本的な構文です。
class ClassName {
constructor() {
// コンストラクタ
}
method1() {
// メソッド1
}
method2() {
// メソッド2
}
}
上記の例では、ClassName
という名前のクラスが定義されています。クラスは、コンストラクタと1つ以上のメソッドで構成されています。コンストラクタは、クラスのインスタンス化時に実行されるメソッドであり、通常、クラスのプロパティを初期化します。メソッドは、クラスで定義された関数であり、クラスのインスタンスで呼び出すことができます。
以下は、クラスを使用してオブジェクトを作成する例です。
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
const person1 = new Person('John', 30);
person1.sayHello(); // "Hello, my name is John and I'm 30 years old."
上記の例では、Person
という名前のクラスが定義されています。constructor
メソッドは、name
とage
という2つの引数を受け取り、それらを**Person
**オブジェクトのプロパティに設定します。sayHello
メソッドは、Person
オブジェクトの情報を出力します。
Person
クラスから新しいオブジェクトを作成するには、new
キーワードを使用してPerson
クラスを呼び出します。new
キーワードは、クラスのインスタンスを作成し、**constructor
**メソッドを実行します。オブジェクトを作成した後、sayHello
メソッドを呼び出すことができます。
カプセル化について
カプセル化とは、オブジェクト指向プログラミングにおいて、オブジェクトの内部状態や振る舞いを、外部から隠蔽することを指します。
具体的には、オブジェクトのプロパティやメソッドを、外部から直接アクセスできないようにすることで、外部から誤った値を設定されたり、本来の使い方と異なる使い方をされたりすることを防止することができます。また、オブジェクトの内部状態を隠蔽することで、オブジェクトの実装を自由に変更できるようになります。
JavaScriptでは、カプセル化を実現するために、通常、クロージャやプライベートメソッドを使用します。クロージャは、関数とその関数が定義されたスコープの組み合わせで、外部からアクセスできないスコープを作ることができます。プライベートメソッドは、クロージャを使用して実現される、オブジェクトの外からアクセスできないメソッドのことを指します。これらの機能を使うことで、JavaScriptでもカプセル化を実現することができます。
クラスは、オブジェクト指向プログラミングの基本的な概念の1つ
クラスはオブジェクトを生成するためのテンプレートまたは設計図です。クラスは、データとメソッドを組み合わせたものであり、同じ種類のオブジェクトを生成するための設計図として利用されます。
例えば、クラスを使用して、犬のオブジェクトを作成することができます。
クラスには、犬の属性(例:名前、年齢、色など)と犬ができること(例:吠える、歩く、食べるなど)が含まれます。
そして、クラスを使用して、異なる犬のオブジェクトを生成することができます。
カプセル化は、クラスにおいて、データを隠蔽し、外部からの直接アクセスを制限することを指します。この隠蔽されたデータは、クラス内部でのみ操作できます。カプセル化により、外部からの不正なデータ操作や、意図しない副作用が発生するのを防止し、クラスのセキュリティと信頼性を向上させることができます。
カプセル化は、クラスのプライベート変数やメソッド、アクセッサー(getterやsetter)を使用して実現されます。プライベート変数やメソッドは、クラス内部でのみアクセスでき、アクセッサーは、外部からのアクセスを制御し、プライベート変数を操作するためのインターフェースを提供します。
例えば、犬のクラスで考えてみましょう。
犬の名前、年齢、色を格納するプライベート変数を持ち、それらの値にアクセスするためのアクセッサー(getterやsetter)を提供することができます。これにより、犬の名前、年齢、色を直接操作されること防ぐことができます
class Dog {
#name; // プライベート変数
#age;
#color;
constructor(name, age, color) {
this.#name = name;
this.#age = age;
this.#color = color;
}
// アクセッサー(getter)
get name() {
return this.#name;
}
get age() {
return this.#age;
}
get color() {
return this.#color;
※アクセッサー(getterやsetter)とは
getterは、オブジェクト内にあるプロパティを取得するためのメソッドです。つまり、外部からオブジェクト内の変数を読み取ることができます。getterは、オブジェクト内の変数を外部に公開する方法です。
setterは、オブジェクト内のプロパティに値を設定するためのメソッドです。つまり、外部からオブジェクト内の変数に値を設定することができます。setterは、オブジェクト内の変数に値を設定するための方法です