クラス・インスタンス・オブジェクトの違いがしっくりこない!
プログラミングの初心者がこんがらがるのが、
- クラス
- インスタンス
- オブジェクト
の3つの違いだと思います。
僕自身、TECH::CAMPで初めてこの概念を学習した時はむちゃくちゃ混乱して、メンターの方に愚痴をこぼしてました。
「僕、プログラミングの才能ないんすかね・・・・」
とか笑
この「クラス・インスタンス・オブジェクト」は、Ruby などのオブジェクト指向のプログラミング言語を勉強すると出てくる重要な概念です。
プログラミングを勉強したい方はまずこの言葉の違いを押さえておくといいでしょう。
僕自身、100%わかっているわけではないんですが、ようやくしっくりき始めましたので、この3つの違いをまとめておこうと思います。
クラス・インスタンス・オブジェクトの違い
実はですね、クラス・インスタンス・オブジェクトの違いは、
神になった気分になるとわかりやすいんです。

自分が神様になったとします。
そして、まだ動物が誕生していない地球に舞い降りたというシチュエーションを想像してください。

オブジェクトとは何か?
まずはオブジェクトですね。
オブジェクトは
すべての物や事柄のこと
を指します。
舞い降りた地球で言うと、木とか川とか岩とか草とかですね。

これらすべての物や事柄はすべてオブジェクトになるわけです。
人間を作る
さて。
ようやく、神に仕事が来ました。人間を作ることになったのです。

神の力を存分に発揮して一人の人間を作ってみました。
うーん、だいたいこんな感じですね。

いやー、大変でした、作るの。
ただ、一人だけの人間だけじゃあまりにも寂しいですよね。
そこで、2人目を作ろうと思ったのですが、ぶっちゃけ、
面倒くさい!

一人目で結構時間がかかったのに、二人目も0から作っていてはいくら時間があっても足りません。
同じことを0から決めるなんて反吐が出ますね。
神になっても時短が求められていて、NO残業を目指さないといけないんです。
クラスとは?
そこで出てきたのが「クラス」という概念です。

これはオブジェクトの設計図のようなもの。
例えば、人を作るために「ヒトクラス」を用意したとしましょう。
この設計図には人をヒトとしてたらしめる、
- 骨格の種類
- 筋肉の種類
- 髪の毛のポジション
- 口の数
- 鼻の穴の数
- 内臓のポジションと機能
- 手の指の数
などが記されているわけです。
この「ヒトクラス」という設計図を基に、2人目以降のヒトを量産していけば簡単に人をたくさん作れるのです。
これがクラスの威力です。
インスタンスとは?
そして、クラスをもとに作ったオブジェクトを「インスタンス」と呼んでいるわけです。

このクラスとインスタンスの仕組みがあるからこそ、いっぱい、簡単に、人を作れるようになったのです。
まさにイノベーションですね。
クラスには何が書いてある?
それでは設計図のクラスには何が書いてあるんでしょうか。
大まかに言うと、
- プロパティ
- メソッド
の2つが書かれています。

プロパティ
まずプロパティですね。
これはデータや値と思っておけば良いです。
例えば、「ヒトクラス」の設計図には、
- 身長
- 体重
- 体温
- 髪の量
- 目の色
- 目の数
とか、「ヒトクラス」から生まれたインスタンス(ヒト)が持つ値が 書かれているのです。
クラスのプロパティの記載のおかげで、いきなり巨人が生まれたり、目が三つぐらいある超人が生まれずに済んでいます。
メソッド
もう一つはメソッド。
これは関数と呼ばれるもので、インスタンスが持てるアクションとか機能だと思っておけばいいですね。
例えば「ヒトクラス」で言うと、
- 走る
- 笑う
- ジャンプする
- 食べる
とかの動作になります。
このようなメソッドが「ヒトクラス」に書いてあるからこそ、人種が違っても人類共通の動作ができるのです。
これらの「プロパティ」と「メソッド」はクラスからインスタンスを作った後に変更が可能です。
例えば、「肌の色」というプロパティを変更してやれば、様々な人種を作れます。
また、「スプーンを曲げる」と言うメソッドを持ったインスタンスを作ればユリ・ゲラーになるわけです。
ヒト以外の動物の作る
この時点で人をたくさん作れましたね。

が、ちょっとそれだけだと地球が退屈です。
人以外の動物オブジェクトも作ることにしました。
そこで、
- 犬クラス
- 猫クラス
- 馬クラス
などの「ヒトクラス」以外のクラスの設計図を作ります。

もし、犬のオブジェクトを作りたい場合、犬クラスからインスタンスを作り、プロパティやメソッドを変更し、チワワインスタンスやコーギーインスタンスを生成していきます。
これは猫クラスも馬クラスも同様ですね。
こんな感じで
クラスを作ってインスタンスを生み出す
ということをしていけば、地球に存在する動物の種類が増えていくわけです。
いやあ、賑やかになってきましたね。
インスタンスはオブジェクトの一種
この時点で、大体クラスとインスタンスオブジェクトの違いはわかってきたと思います。
ただ、ちょっとしっくりこないのが、
オブジェクトとインスタンスの違い
ですよね。
実はこれは、
インスタンスの定義をはっきりすればしっくりきます。
インスタンスとは、
クラスを元に作り出したオブジェクト
なのです。

つまり、インスタンスはオブジェクトの一種。
色々オブジェクトがある中、クラスを使って作ったオブジェクトをインスタンスというわけです。
つまり、
インスタンスはオブジェクトである
とえますが、
オブジェクトはインスタンスである
とは言えないのです。

これはプログラミング言語によって、クラス以外からできるオブジェクトが存在しているためですね。
ちょっと話が飛躍しすぎて、何の記事を書いているのかわからなくなってきましたね笑
クラス・インスタンス・オブジェクトの違いがしっくりきたかわかりませんが、僕はこれで納得しています。
是非、プログラミング学習の第一関門である「クラス・インスタンス・オブジェクトの違い」を自分の中で整理してみてくださいね。
それでは楽しんでプログラミングを勉強していきましょう!
Lin

おそらく、ブロガー。現在ホテル暮らしで全国フラフラしています。
ネット広告代理店に1年3ヶ月勤め上げ、独立をして丸4年が経ちました。今年でフリーランス 5年目。
質問・ご意見・相談があればLINEで受け付けていますのでお気軽にどうぞ 。
めっちゃしっくりきたような気がします
わかりやすかったです
ありがとうございます