はじめに
前回の記事でオブジェクトの基礎的部分「オブジェクトとは、classとは、thisって何」をアウトプットしました!
今回の記事では、「オブジェクトの参照」についてアウトプット。
オブジェクトのデータはどのように格納されている
結論、インスタンスが作成されると、オブジェクトのデータを格納するために必要なヒープ領域がメモリ上に割り当てられる![]()
オブジェクトを変数に割り当てる際は、ヒープメモリのアドレスが変数に格納され、それを介してオブジェクトのデータにアクセス可能です。
この変数をオブジェクト変数と呼びます。
ヒープ領域について
ヒープメモリ: スタックのように整理されておらず、自由で広大な空き地のような領域です。
自由度: new や malloc などのキーワードを使い、実行時に必要なサイズを確保します。
生存期間: スコープが終わっても勝手には消えません。メモリアドレス(住所)を知っていれば、どの関数からでもアクセス可能です。
オブジェクト参照は、ヒープ領域内のアドレスなため、どのスコープからでもアクセス可能です。
つまり、別のスコープで発生したオブジェクトの状態の更新は、呼び出し元のスコープが終了した後であっても残り続けるということを意味します。
アクセス修飾子 -メンバ変数へのアクセス制限
特定のメンバ変数を変更されないようにしたい場合、アクセス修飾子を使用することでアクセスを制限できる。
private キーワードを用いると、クラス内部でのみメンバ変数の読み書きができ、
public キーワードを用いると、どのスコープでもオブジェクトのメンバ変数の読み書きができるようになります。
可変オブジェクト,不変オブジェクト
可変オブジェクト(mutable object) とは、作成後に変更することができるオブジェクトの一種です。つまり、オブジェクトのプロパティや値は、初期化された後に変更、追加、削除することができます。
不変オブジェクト(immutable object) は、作成後に変更できないオブジェクトの一種です。つまり、オブジェクトのプロパティや値は一定で、一度初期化されると変更することができません。
| 種類 | カテゴリ | 具体的な型 |
|---|---|---|
| 可変 (Mutable) | オブジェクト型 | "object, Array, Map, Set, any" |
| 不変 (Immutable) | プリミティブ型 | "string, number, boolean, null, undefined, symbol" |
ステートレスオブジェクト(stateless object)
オブジェクトの中には、そもそも状態を持っていないものもあります。
つまり、インスタンス変数を持たない、あるいは定数になっており、これらのクラスのインスタンスを ステートレスオブジェクト(stateless object)といいます。
まとめ
実践で使用してみないと良し悪しが掴めないので、概要把握して次に進みます!
次回は「リスト」について学習!
ではまた!