参照型

Swiftにおける「参照型(Reference Type)」とは、インスタンスの実体を複数の変数が共有して保持する型のことを指します。Swiftでは**クラス(class)**がこの参照型に該当します。


1. 参照型の基本概念

参照型の特徴は、変数や定数がインスタンスそのものではなく、そのインスタンスへの「参照(ポインタのようなもの)」を保持しているという点です。これにより、ある変数を通してインスタンスの内容を変更すると、そのインスタンスを参照している他のすべての変数にもその変更が反映されます。


2. 値型との違い

Swiftには「値型(Value Type)」も存在し、こちらは構造体(struct)や列挙型(enumで表されます。値型では、変数や定数に代入や引数渡しが行われるたびにコピーが作られますが、参照型ではコピーされず同じインスタンスが共有されます。

特性 参照型(クラス) 値型(構造体)
メモリの扱い インスタンスの参照を保持 インスタンスをコピー
変更の伝播 変更が他の参照先にも影響する コピー先にのみ影響
継承 可能 不可

3. 実例コード

swift
class Person { var name: String init(name: String) { self.name = name } } var a = Person(name: "Taro") var b = a // 同じインスタンスを参照 b.name = "Jiro" print(a.name) // → "Jiro"(aとbは同じインスタンスを参照している)

このコードでは、abは同じPersonインスタンスを参照しているため、b.nameを変更するとa.nameにも影響が出ます。


4. 参照型の使用に関する注意点

  • メモリ効率の面では、値型よりも有利な場合もあります(特に大きなデータ構造)。

  • ただし、複雑な状態管理が必要なとき、参照型の共有によって予期しない副作用が発生する可能性があるため注意が必要です。

  • Swiftでは**ARC(Automatic Reference Counting)**によってメモリ管理が行われており、参照型のインスタンスは参照カウントが0になると自動的に解放されます。


まとめ

  • Swiftにおいてクラスは参照型であり、インスタンスを複数の変数が共有して扱う

  • 代入や引数渡しではコピーが行われず、同じインスタンスへの参照が渡される

  • 状態が共有されるため、副作用や循環参照に注意が必要。

生成日:2025/05/04