インスタンス いんすたんす
簡単に言うとこんな感じ!
クラスが「たい焼きの型」だとしたら、インスタンスは「その型から実際に焼き上がったたい焼き」だよ!型はひとつでも、たい焼きは何個でも作れる。プログラムの中で「設計図をもとに実体を作り出したもの」がインスタンスなんだ!
インスタンスとは
インスタンス(instance) とは、クラス(設計図)をもとにメモリ上に生成された実体(オブジェクト) のことです。「インスタンス化(instantiation)」と呼ばれる操作によって生み出され、プログラムが実際に動くときに扱うデータや機能のまとまりを指します。
たとえば「ユーザー」というクラスを定義しておけば、「田中さん」「鈴木さん」「佐藤さん」といった個別のユーザーをそれぞれインスタンスとして生成できます。同じ設計図から何個でも独立した実体を作れるのがポイントで、それぞれのインスタンスは自分専用のデータ(プロパティ) を持ちます。
システム発注の場面では「サーバーのインスタンス」という使われ方もよく登場します。クラウド上で仮想サーバーを立ち上げることを「インスタンスを起動する」と表現するなど、「設計や定義をもとに作られた具体的な実体」という意味で幅広く使われる言葉です。
クラスとインスタンスの関係
クラスとインスタンスの関係は、「型」と「実物」の関係で整理すると分かりやすいです。
| 概念 | 役割 | 具体例 |
|---|---|---|
| クラス | 設計図・テンプレート | 「ユーザー」という定義 |
| インスタンス | 設計図から作られた実体 | 「田中さん」「鈴木さん」 |
| プロパティ | インスタンスが持つデータ | 名前・メールアドレスなど |
| メソッド | インスタンスが持つ機能 | ログインする・注文するなど |
| コンストラクタ | インスタンスを生成する命令 | new User("田中") など |
たい焼きで覚える「クラス=型、インスタンス=たい焼き」
- 🐟 型(クラス):形・仕様が決まっている。何個でも同じ形のたい焼きを作れる
- 🍡 たい焼き(インスタンス):型から焼き上がった実物。あんこ入り・カスタード入りなど中身(データ)は別々
- 🏭 焼く行為(インスタンス化):
newキーワードなどでメモリ上に実体を作る操作
実際のコードイメージ(Python)
# クラス定義(設計図)
class User:
def __init__(self, name, email):
self.name = name # プロパティ
self.email = email
def greet(self): # メソッド
print(f"こんにちは、{self.name}さん")
# インスタンス化(実体を生成)
user1 = User("田中", "tanaka@example.com") # インスタンス1
user2 = User("鈴木", "suzuki@example.com") # インスタンス2
user1.greet() # → こんにちは、田中さん
user2.greet() # → こんにちは、鈴木さん
歴史と背景
- 1960年代:Simula 67(シミュラ)がクラスとインスタンスの概念を初めて導入。オブジェクト指向プログラミングの原点とされる
- 1970年代:Smalltalk がインスタンスとメッセージパッシングを中心に据えた純粋オブジェクト指向言語として登場
- 1980〜90年代:C++、Java が普及し、クラス・インスタンスの概念がソフトウェア開発の標準的な考え方になる
- 2000年代:Python、Ruby、C# など多くの言語でオブジェクト指向が標準サポートされ、インスタンスは日常的に使われる概念に
- 2010年代以降:クラウドの世界でも「EC2 インスタンス」「コンテナインスタンス」など、仮想リソースの実体 を指す言葉として IT 全般に広がる
クラス・オブジェクト・インスタンスの関係図
「クラス」「オブジェクト」「インスタンス」は混同されがちな用語です。それぞれの位置づけを整理します。
| 用語 | 意味 | 補足 |
|---|---|---|
| クラス | 設計図・テンプレート | コードとして定義するもの |
| インスタンス | クラスから生成した実体 | メモリ上に存在する実物 |
| オブジェクト | データと機能のまとまり | インスタンスとほぼ同義で使われる |
💡 厳密には「オブジェクト」はより広い概念(クラスそのものもオブジェクトとして扱う言語もある)ですが、日常的な会話では「インスタンス」と「オブジェクト」はほぼ同じ意味で使われます。
クラウドでの「インスタンス」
プログラミング以外でも「インスタンス」はよく使われます。特にクラウドサービスでは頻出です。
| 文脈 | 意味 | 具体例 |
|---|---|---|
| クラウドサーバー | 仮想マシンの実体 | AWS EC2 インスタンス |
| データベース | DBサーバーの実体 | RDS インスタンス |
| コンテナ | コンテナの実行単位 | Docker コンテナインスタンス |
| アプリケーション | 実行中のプロセス | アプリの複数インスタンスを起動 |
いずれも「定義・設定をもとに作られた具体的な動作実体」という意味で使われており、プログラミングのインスタンスと本質的に同じ概念です。
関連用語
- ./042-class.md — クラス:インスタンスのもとになる設計図・テンプレート
- ./044-object-oriented.md — オブジェクト指向:クラスとインスタンスを中心とした設計思想
- ./045-constructor.md — コンストラクタ:インスタンスを生成・初期化する特別なメソッド
- ./046-method.md — メソッド:インスタンスが持つ機能・操作
- ./047-property.md — プロパティ:インスタンスが持つデータ・状態
- ./048-inheritance.md — 継承:クラスの定義を引き継いで新しいクラスを作る仕組み
- ./049-virtual-machine.md — 仮想マシン:クラウドでの「インスタンス」の代表格
- ./050-encapsulation.md — カプセル化:プロパティとメソッドをひとまとめにする考え方