[swift] 7. struct vs class


📖 structとclassの違い

struct복사class공유です
すなわち、structは、参照された値に影響を与えるのではなく、既存の値に影響を与える.
💬 YouTubeの1ページ目を思い出して各ビデオに対応する領域に表示される情報には、名前、ビデオサムネイル、url、およびブラウズ回数が含まれる.与えられたデータ型を1つずつ管理するのは難しいため、プログラミングではclassにデータを集中して管理します.
💬 モデルにデータを整理するには、次の2つの方法があります.
  • struct
  • class
  • 📌 struct


    struct 모델 { 구조체 이름 }
    ex)
    struct YoutuberStruct {
        var name : String
        var subscribersCount : Int
    }
    💬 宣言された構造体に2つの情報を入力できます.
    var devJeong = YoutuberStruct(name:"정대리", subscribersCount: 99999)
    💬 必要な情報を含む構造を구조체 내용の名義で宣言した.
    var devJeongClone = devJeong
    💬 devJeongdevJeongをコピーすると発表しました.
    print("값 넣기 전 devJeongClone.name : \(devJeongClone.name)")
    
    >>> 값 넣기 전 devJeongClone.name : 정대리
    💬 devJeongCloneのname値はdevJeongCloneと同じです.
    devJeongClone.name = "하하"
    💬 次に、devJeongのname値を変更します.
    print("값 넣은 후 devJeongClone.name : \(devJeongClone.name)")
    print("값 넣은 후 devJeong.name : \(devJeong.name)")
    
    >>> 값 넣은 후 devJeongClone.name : 하하
    값 넣은 후 devJeong.name : 정대리 
    💬 その結果,devJeongCloneの内部値は変化したが,devJeongCloneには影響しなかった.
    」構造のコピー後、他のオブジェクトに影響する(Xに影響する)

    📌 class


    class devJeong { class 이름 }
    ex)
    struct YoutuberClass {
        var name : String
        var subscribersCount : Int
        
        // 메모리에 올린다! 시작한다! - 생성자
        // 두 변수에 값이 없음
        // init으로 매개변수를 가진 생성자 메소드를 만들어야
        // 매개변수를 넣어서 그 값을 가진 객체(object)를 만들 수 있다.
        
        init(name:String, subscribersCount: Int) {
            self.name = name // 외부에서 넘어오는 name 값을 넣을게요
            self.subscribersCount = subscribersCount
        }
    }
    💬 宣言されたクラスに2つの情報を入力できます.(構造体とは異なり、作成者を特定)
    var jeongDaeRi = YoutuberClass(name:"정대리", subscribersCount: 99999)
    
    var jeongDaeRiClone = jeongDaeRi
    
    print("값 넣기 전 jeongDaeRiClone.name : \(jeongDaeRiClone.name)")
    
    >>> 값 넣기 전 jeongDaeRiClone.name : 정대리
    
    💬 上記のようにclass 내용というclassを作成し、jeongDaeRiにコピーします.
    jeongDaeRiClone.name = "바보"
    
    print("값 넣은 후 jeongDaeRiClone.name : \(jeongDaeRiClone.name)")
    
    print("값 넣은 후 jeongDaeRi.name : \(jeongDaeRi.name)")
    
    >>> 값 넣은 후 jeongDaeRiClone.name : 바보
    값 넣은 후 jeongDaeRi.name : 바보
    💬 structとは異なり、レプリケーション・クラスの値を参照して変更すると、既存のクラスの値にも影響を及ぼすことに気づく可能性があります.jeongDaeRiCloneは互いにつながっている.
    同じようなものを作ったら、一方を壊し、もう一方も破壊します.
    私が修正した内容は他の人にも見られます.
    同じメモリ容量を共有します.
    💬 YouTubeで私のビデオ情報を修正すると、他の人にとって同じであることがわかりやすくなります.