[swift] 7. struct vs class
📖 struct과 class 차이
struct는복사,class는공유
즉,struct는 참조하는 값이 바뀌어도 기존의 값에 영향을 미치지 않고class는 영향을 미칩니다.
💬 유튜브 첫 페이지를 떠올려봅니다. 한 영상 당 해당되어 있는 영역에 나타내는 정보는 이름, 영상 썸네일, url, 조회수 등이 있습니다. 이렇게 정해져 있는 데이터 종류를 하나하나 관리하기 힘들어, 프로그래밍에서는 하나의 모델 에 묶어두고 관리합니다. 
💬 데이터를 모델에 묶는 방식은 두 가지가 있습니다.
- struct
 - class
 
📌 struct (구조체)
struct
구조체 이름{구조체 내용}
ex)
struct YoutuberStruct {
    var name : String
    var subscribersCount : Int
}
💬 선언한 구조체 안에 두 가지 정보를 입력할 수 있습니다.
var devJeong = YoutuberStruct(name:"정대리", subscribersCount: 99999)
💬 원하는 정보를 담은 구조체를 devJeong 이라는 이름으로 선언했습니다.
var devJeongClone = devJeong
💬 devJeong 을 복제한 devJeongClone 을 선언합니다.
print("값 넣기 전 devJeongClone.name : \(devJeongClone.name)")
>>> 값 넣기 전 devJeongClone.name : 정대리
💬 devJeongClone 안의 name 값은 devJeong 과 동일합니다.
devJeongClone.name = "하하"
💬 이제, devJeongClone 안의 name 값을 변경해봅시다.
print("값 넣은 후 devJeongClone.name : \(devJeongClone.name)")
print("값 넣은 후 devJeong.name : \(devJeong.name)")
>>> 값 넣은 후 devJeongClone.name : 하하
값 넣은 후 devJeong.name : 정대리 
💬 결과를 확인해보면, devJeongClone 내부의 값이 변했음에도 devJeong 에는 영향을 주지 않았음을 알 수 있습니다.
⭐️ struct는 복제하면 다른 개체 (영향 X)
📌 class
class
class 이름{class 내용}
ex)
struct YoutuberClass {
    var name : String
    var subscribersCount : Int
    
    // 메모리에 올린다! 시작한다! - 생성자
    // 두 변수에 값이 없음
    // init으로 매개변수를 가진 생성자 메소드를 만들어야
    // 매개변수를 넣어서 그 값을 가진 객체(object)를 만들 수 있다.
    
    init(name:String, subscribersCount: Int) {
        self.name = name // 외부에서 넘어오는 name 값을 넣을게요
        self.subscribersCount = subscribersCount
    }
}
💬 선언한 class 안에 두 가지 정보를 입력할 수 있습니다. (구조체와 달리 생성자가 있음을 확인)
var jeongDaeRi = YoutuberClass(name:"정대리", subscribersCount: 99999)
var jeongDaeRiClone = jeongDaeRi
print("값 넣기 전 jeongDaeRiClone.name : \(jeongDaeRiClone.name)")
>>> 값 넣기 전 jeongDaeRiClone.name : 정대리
💬 위에서와 같은 방식으로 jeongDaeRi 라는 class를 만들고 jeongDaeRiClone 안에 복제합니다.
jeongDaeRiClone.name = "바보"
print("값 넣은 후 jeongDaeRiClone.name : \(jeongDaeRiClone.name)")
print("값 넣은 후 jeongDaeRi.name : \(jeongDaeRi.name)")
>>> 값 넣은 후 jeongDaeRiClone.name : 바보
값 넣은 후 jeongDaeRi.name : 바보
💬 struct와 달리, 복제한 class의 한 값에 참조해 변경하였을 때 기존 class의 값에도 영향을 미침을 깨달을 수 있습니다.
⭐️
class는 서로 연결이 되어있습니다.
본따서 똑같은 걸 만들고 한 쪽을 훼손하면, 다른 한 쪽도 훼손되며
내가 수정한 내용을 다른 사람들이 다 볼 수 있습니다.
같은 메모리 공간을 공유하고 있기 때문입니다.
💬 유튜브에서 내 영상의 정보를 수정하면, 다른 사람에게 똑같이 보여진다는 점을 생각하면 이해가 편합니다.
Author And Source
이 문제에 관하여([swift] 7. struct vs class), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dlwogus0128/swift-7.-struct-vs-class저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)