본문 바로가기
goodLuck
개발 관련/IOS_SwiftUI

class, struct 의 차이

by snowballing 2022. 7. 10.

*이해한 대로 쓰기*


수많은 변수, 상수를 포함한 데이터를 담는 데이터 덩어리를 class, struct 이라고 생각하면 쉽다. 

다만 이 두개의 차이는 어느 메모리 공간에서 생성되는 지 그 부분의 차이가 큰 것 같다. 

 

클래스는 참조타입이고, 구조체는 값타입. 

참조는 주소를 참조하는 거고, 구조체는 값을 복사하다는 그런의미로 이해하는 중. 

그래서 클래스에선 참조하는 애에게 새로운 값을 부여하면, 기존애한테는 영향을 주지 않는다. 단순히 그 주소값만 내려받은거니까 본체와 전혀 다른 존재라고 생각하면 된다. 새로운 값을 부여하기 전에 기존본체a와 새로운객체b는 처음에만 같이 생겼을 뿐, 새로운 값을 받게되면 전혀 다른 내용을 가지게 된다. 

구조체같은 경우엔 값을 복사해서 갖게되기 때문에 한개의 몸에서 떨어져나가더라도 같은 유전자정보를 가지고 있기때문에 새로운 객체에 값이 달라지면, 동일하게 본체에도 영향을 받는다. 

제대로 이해한 게 맞는 건지 .. ㅋㅋ (아래 결과 참고)

 

 

import UIKit
import Foundation

struct YoutubeStruct {
    var name: String
    var subscriberCount: Int
}

var devJeong = YoutubeStruct (name: "leesoenghyeon", subscriberCount: 99999)
var devJeongClone = devJeong

print("값 넣기 전 devJeongClone.name : \(devJeongClone.name)")

devJeongClone.name = "dotori"
print("값 넣은 후 devJeongClone.name : \(devJeongClone.name)")
print("값 넣은 후 devJeong.name : \(devJeong.name)")

print("=============== 구분선 =================")

class YoutubeClass {
    var name: String
    var subscriberCount: Int
    
    //생성자 만들어주기 = 메모리에 올려주는 역할
    init(name: String, subscriberCount: Int){
        self.name = name
        self.subscriberCount = subscriberCount
    }
}

var devJeongdd = YoutubeClass (name: "leesoenghyeon", subscriberCount: 99999)
var devJeongClonedd = devJeongdd
print("값 넣기 전 devJeongClonedd.name : \(devJeongClonedd.name)")

devJeongClonedd.name = "dotori"
print("값 넣은 후 devJeongClonedd.name : \(devJeongClonedd.name)")
print("값 넣은 후 devJeongdd.name : \(devJeongdd.name)")

댓글