[Swift]クラスと構造体の違い


クラスと構造の共通点

  • 値を格納するためにpropertyを宣言することができる.
  • 関数の機能を宣言する方法.
  • の内部値.アクセスを使用できます.
  • ジェネレータを使用して初期状態を設定できます.
  • 拡張機能を使用して機能を拡張できます.
  • プロトコルを使用して機能構成を行うことができます.
  • クラスと構造の違い

  • クラス
  • 参照タイプ
  • レプリケーション
  • 割当またはパラメータ伝達時のオブジェクトへのメモリのアドレス値
  • Heap Memoryに格納され、速度が遅い.
  • を継承することができる.
  • 構造体
  • 値タイプ
  • 分配又はパラメータ伝達時に値コピー
  • を生成する.
  • Stack Memoryに格納され、速度が速い.
  • 継承不可
  • コードの例

    class SomeClass {
        var count : Int = 0
    }
    
    var class1 = SomeClass()
    var class2 = class1
    var class3 = class1
    
    class3.count = 2
    class1.count // 2 , 참조 타입이기 때문에 복사본과 원본값이 같게 된다.
    
    struct SomeStruct {
        var count : Int = 0
    }
    
    var struct1 = SomeStruct()
    var struct2 = struct1
    var struct3 = struct1
    
    struct2.count = 2
    struct3.count = 3
    
    struct1.count // 0
    struct2.count // 2
    struct3.count // 3 , 값 타입이기 때문에 매번 새로운 메모리가 할당되어서 값을 변경해도 다른 구조체에 영향을 주지 않는다.