インスタンスとオブジェクトの違いとは?クラスとの関係は?違いや注意点もプログラマーがわかりやすく解説
ライター/woinary
某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。
インスタンスとオブジェクトの違いは?
image by iStockphoto
「インスタンス」と「オブジェクト」は、どちらもオブジェクト指向プログラミング(略してOOP)で出てくる言葉で、「クラス」と一緒に使われることが多いです。ざっくり言えば「クラス」を元に実体化したものを「インスタンス」や「オブジェクト」と呼びます。では「インスタンス」とも「オブジェクト」とも呼ぶのであれば、これらは同じものなのでしょうか?
実はそうではありません。それを見ていきましょう。
インスタンス:クラスを実体化したもの
「インスタンス(Instance)」を英和辞書で引くと「実例、事例」という訳語が出てきます。インスタンスとはクラスを実体化したものです。プログラミングする際に、まとめて考えた方が良いものを集めたものがクラスになります。例えば学生のデータをまとめたものを学生クラス、成績をまとめたものが成績クラスです。
これらのクラスの中には実際にデータが入っているわけではありません。設計図や型紙のようなものだとイメージしてください。設計図や型紙をもとに実際にデータを入れるものを作ることを「インスタンス化」と呼び、作ったものがインスタンスとなります。プラモデルに例えると、パーツ表や組み立て方を書いた紙がクラス、実際に組み立てたものがインスタンスと考えてください。
オブジェクト:すべての総称
OOPの考え方ではすべてのものが「オブジェクト」である、としています。データを入れる変数も、その変数を使って何かの処理をする関数も、それらを集めたクラスも、すべてオブジェクトである、という考え方です。
OOP以前のプログラミング言語では変数は変数、関数は関数と違うものと考えていました。それをOOPではすべてオブジェクトと考えるのです。そのオブジェクト同士が連携してプログラムが動作するというのがOOPの考え方になります。
こちらの記事もおすすめ
関数とメソッドの違いとは?オブジェクト指向って何?使い分けや注意点もプログラマーがわかりやすく解説
オブジェクト指向はすべてオブジェクトという考え方
image by iStockphoto
オブジェクト指向プログラミング(OOP)とは何でしょうか。ざっくりと言うと、プログラムで使う変数も関数も、その他のものもすべて「オブジェクト」である、という考え方です。では「オブジェクト」とは何なのでしょうか。そのまま直訳すると「もの」となります。
例えば、人間も犬も猫も猿もみな動物です。それと同じようにプログラムの中にある変数や関数、あるいはクラスといったものも違うように見えてすべて同じ「もの」であるという考え方になります。何だか曖昧でよくわかりませんよね。もう少し詳しく見ていきます。
\次のページで「プログラムはすべてオブジェクト?」を解説!/