オブジェクト指向プログラミング

インスタンス いんすたんす

オブジェクト指向クラスオブジェクトインスタンス化コンストラクタメモリ
インスタンスって何?クラスと何が違うの?

簡単に言うとこんな感じ!

クラスが「たい焼きの型」だとしたら、インスタンスは「その型から実際に焼き上がったたい焼き」だよ!型はひとつでも、たい焼きは何個でも作れる。プログラムの中で「設計図をもとに実体を作り出したもの」がインスタンスなんだ!


インスタンスとは

インスタンス(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年代PythonRubyC# など多くの言語でオブジェクト指向が標準サポートされ、インスタンスは日常的に使われる概念に
  • 2010年代以降:クラウドの世界でも「EC2 インスタンス」「コンテナインスタンス」など、仮想リソースの実体 を指す言葉として IT 全般に広がる

クラス・オブジェクト・インスタンスの関係図

「クラス」「オブジェクト」「インスタンス」は混同されがちな用語です。それぞれの位置づけを整理します。

クラス 設計図・テンプレート class User { ... } インスタンス クラスから生成された実体 user1 = User("田中") user2 = User("鈴木") user3 = User("佐藤") インスタンス化 new / コンストラクタ オブジェクト 「インスタンス」とほぼ同義で使われる プロパティ name: "田中" email: "..." メソッド greet() login() データ(状態)と機能(振る舞い)を ひとまとめにしたもの ※「オブジェクト」は広義の総称、 「インスタンス」はクラスから生成した実体を指す
用語意味補足
クラス設計図・テンプレートコードとして定義するもの
インスタンスクラスから生成した実体メモリ上に存在する実物
オブジェクトデータと機能のまとまりインスタンスとほぼ同義で使われる

💡 厳密には「オブジェクト」はより広い概念(クラスそのものもオブジェクトとして扱う言語もある)ですが、日常的な会話では「インスタンス」と「オブジェクト」はほぼ同じ意味で使われます。


クラウドでの「インスタンス」

プログラミング以外でも「インスタンス」はよく使われます。特にクラウドサービスでは頻出です。

文脈意味具体例
クラウドサーバー仮想マシンの実体AWS EC2 インスタンス
データベースDBサーバーの実体RDS インスタンス
コンテナコンテナの実行単位Docker コンテナインスタンス
アプリケーション実行中のプロセスアプリの複数インスタンスを起動

いずれも「定義・設定をもとに作られた具体的な動作実体」という意味で使われており、プログラミングのインスタンスと本質的に同じ概念です。


関連用語