インスタンスとは

インスタンス(instance)とは、設計図から出来上がったもの。

インスタンスは、オブジェクト指向で使われる言葉でもあるが、コンピュータを複数に仮想化された場合のその一つ一つを指すこともある。また、マストドンでいうインスタンスは、サーバのことである。英語では「instance」。

プログラミングのオブジェクト指向でいうインスタンスとは、設計図から複数の実体を作ることである。つまり、クラスから複数のインスタンスを生成することができる。クラスとは、定数や変数、関数などをまとめて入れておく、箱のようなもの。これに対しインスタンスは、クラスから実際に作られたデータのことを言う。このインスタンスをオブジェクトと呼ぶこともあるが、インスタンスは、メモリ上において実際に配置されたものを指す傾向が強い。

例えば、「classが作るオブジェクトを使うにはnew演算子を用いてインスタンス化する」という風に、オブジェクトという言葉を使う場合がある。一般にオブジェクトという言葉は、クラスもインスタンスも含めて指す場合が多いが、その解釈は人によって様々だ。

クラス(class)は、定数や変数、関数などを放り込んだボックスのようなものである。なぜclassという概念とインスタンスがセットで、オブジェクト指向がどうのこうのという話題になるのかと言えば、多分、管理が楽だからである。class化しておけば自分でコードを見るのも変更するのも楽。複数人で管理している場合、class化された内容を変更しなければ、みんなで使えて管理が楽。class化されたものは一度作るとあまり変更されないため、組織にとっても管理が楽である。クラスを作った人がどこかに消えても一度作ったクラスは、多分残るから。

こんな良いこと尽くめのクラスだが、小回りが効かない。アプリケーション全体で利用できる共通部分の関数や変数、定数などをclass化しているため、一度しか使わないような関数をわざわざclass化してインスタンス化なんてしない。そのため、あらゆる部分で使えるクラスを中心に開発する。そうなると、柔軟性がなくなって複雑な処理ができなくなってしまう。

つまり、みんなで利用できる管理性の優れた小回りの効かないプログラムを作るか、みんなで利用できないとても不便極まりない小回りの効くプログラムを作るか、そのどちらかに偏ってしまうのかも知れない。

インスタンスの意味を簡潔に説明すると

classを通して出てきたもの。