画像ツール一覧

インスタンス

Instance

アプリ開発

オブジェクト指向プログラミングにおいて、「クラス(設計図)」をもとにして、コンピュータのメモリ上に実際に作成された「実体」のこと。設計図から生み出された具体的なデータと振る舞いを持つ個々の存在を指します。

🐾 猫で例えると?

キャットタワーの同じ形のハンモックにそれぞれ入って、同じようにこちらを見ている茶トラとアメショ
同じ「猫」という設計図から作られた、独立した2つの実体

キャットタワーのハンモックに収まり、同じような体勢でこちらを見つめるアメショと茶トラ。彼らはどちらも「猫(クラス)」という共通の設計図から生まれていますが、毛色や性格(プロパティ)は全く異なる別々の存在です。一方はツンデレで一方は甘えん坊といったように、個別のデータを持った実体としてこの世界(メモリ上)に存在している状態が「インスタンス」です。

🐾 PR

💻 アプリ・Web開発における「インスタンス」とは?

現代のプログラミング(特にJava、C#、TypeScriptなどのオブジェクト指向言語)では、プログラムを「モノ(オブジェクト)」の集まりとして組み立てていきます。その際、毎回ゼロからモノを作るのは非効率なので、まずは「クラス」という設計図を書きます。

クラスからnewなどで個体を作り、初期値を与えたものがインスタンスです。クラス自体にstaticな機能を持てる言語もあるため、「クラスだけでは何も動かない」という意味ではありません。ここでは個々の猫の状態を持たせる場面に注目します。

⚠️ インスタンスの仕組みと注意点

インスタンスごとのプロパティは、それぞれ別の値を保持できます。ただし、同じ外部オブジェクトを両方へ渡した場合や、staticなデータを使う場合には状態を共有することもあります。「newすれば内部のすべてが独立する」とは限りません。

TypeScriptでのインスタンス生成イメージ

実際にクラスを定義し、そこから異なる特徴を持つインスタンスを生み出すコードの例です。

// TypeScriptでの例
// 1. まず「猫」という設計図(クラス)を定義する
class Cat {
    name: string;
    personality: string;

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

    // 共通の振る舞い(メソッド)
    greet() {
        console.log(`${this.name}は${this.personality}な性格です。`);
    }
}

// 2. 設計図をもとに、実体(インスタンス)を生成する
const amesho = new Cat("アメショ", "ツンデレで特定の女性が好き");
const chatora = new Cat("茶トラ", "愛嬌たっぷりで誰にでもお腹を見せる");

// それぞれ独立したインスタンスとして振る舞う
amesho.greet();  // 出力: アメショはツンデレで特定の女性が好きな性格です。
chatora.greet(); // 出力: 茶トラは愛嬌たっぷりで誰にでもお腹を見せる性格です。

ameshoとchatoraは別のインスタンスです。一方、const anotherName = ameshoと代入しただけなら、anotherNameは同じ個体を指す別名になります。JavaScriptやTypeScriptでは、変数をコピーすることとインスタンスを複製することを区別します。

🛠️ インスタンスを賢く使うためのポイント

開発現場でインスタンスを扱う際の設計上のポイントや、パフォーマンスに関する注意点です。

同じ猫でも茶トラとアメショが別々の個体であるように、同じクラスから作ったインスタンスも別の実体です。一方を変更したときに他方まで変わるなら、共有しているデータや参照がないかを確認すると、設計の理解が深まります。