クラス
Class
クラス(Class)とは、オブジェクト指向プログラミングにおいて、オブジェクト(モノ)を生成するための「設計図」または「ひな形」のことです。そのオブジェクトが持つべきデータ(属性・プロパティ)と、実行可能な処理(振る舞い・メソッド)をひとまとめにして定義します。
🐾 猫で例えると?
写真の2匹は、眠っていても別々の猫。プログラムで猫を表すなら、一匹ずつの実体であるインスタンスに当たります。そこから「名前と毛色を持ち、鳴く動作ができる」という共通の仕様を抜き出したものが、猫クラスの設計図です。
💻 開発現場における「クラス」とは?
現在のアプリやWeb開発において、JavaScript、Python、Java、PHPなど多くの言語で「オブジェクト指向」という考え方が採用されており、クラスはその中核を担う概念です。クラスという設計図を用意しておくことで、同じような構造を持つデータと処理のまとまり(インスタンス)を、何度でも効率的に量産することができます。
現場では、例えば「ユーザー機能」や「商品データ」など、意味のある単位でクラスを分割して設計します。これにより、コードの可読性が上がり、バグが発生した際の修正範囲を限定できる(カプセル化)という大きなメリットがあります。
⚠️ クラスの仕組みと注意点
クラスとインスタンスは区別しますが、「クラスはプログラム上の値ではない」とは限りません。JavaScriptではクラス自体も値として扱え、staticメソッドを呼ぶこともできます。new Cat(...)は、個別の状態を持つ新しいインスタンスを作る操作です。
// JavaScriptでのクラス定義とインスタンス化の例
class Cat {
// プロパティ(属性)の初期化
constructor(name, color) {
this.name = name;
this.color = color;
}
// メソッド(振る舞い)
meow() {
console.log(`${this.name}はニャーと鳴きました!`);
}
}
// クラス(設計図)からインスタンス(実体)を生成
const myCat1 = new Cat("アメショ", "シルバータビー");
const myCat2 = new Cat("茶トラ", "オレンジ");
myCat1.meow(); // アメショはニャーと鳴きました! この例ではmyCat1とmyCat2がそれぞれnameとcolorを持ち、meowという共通の振る舞いを使います。JavaScriptのクラス構文はプロトタイプの仕組みの上にあり、すべてのメソッドの実体が毎回個別にコピーされるわけではありません。
🛠️ クラスを賢く使うためのポイント
実務でクラスを設計する際は、何でもかんでも1つのクラスに詰め込もうとしないことが重要です。
- 単一責任の原則を意識する: 1つのクラスは1つの役割(責任)だけを持つように設計すると、保守しやすいコードになります。
- 過度な継承を避ける: 親クラスの機能を引き継ぐ「継承」は便利ですが、階層が深くなりすぎると影響範囲が追いづらくなるため、最近は「移譲(コンポジション)」が好まれる傾向にあります。
- 公開する操作を絞る: この例のnameとcolorは外部から変更できます。内部状態を直接触らせたくない場合、JavaScriptでは#付きのprivateフィールドなどを使い、許可する操作をメソッドとして公開します。
猫が目覚めるのは、既存のインスタンスが行動を始めるイメージです。インスタンス化は「寝ていたものが活動すること」ではなく、新しい個体に相当するデータを生成すること、と分けて覚えましょう。