[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.)