Language/Swift-Basic

Swift - Struct vs Class

Jessi :D 2022. 2. 21. 14:58

스트럭터와 클래스 비교

Struct - 구조체

// 유튜버 (데이터) 모델
struct YoutuberStruct {
	var name : String
	var subscriberCount : Int
}

값 넣기 전

var devJung = YoutuberStruct(name: "정대리", subscriberCount: 999)
var devJungClone = devJung

print("값 넣기 전 : devJungClone.name : \(devJungClone.name)")
//값 넣기 전 : devJungClone.name : 정대리

값 넣은 후

값을 새로 넣어도 원래의 값은 변하지 않음

devJungClone.name = "만쥬"

print("값 넣은 후 : devJungClone.name : \(devJungClone.name)")
// 값 넣은 후 : devJungClone.name : 만쥬

print("값 넣은 후 : devJung.name : \(devJung.name)")
// 값 넣은 후 : devJung.name : 정대리

결론

복사해서 사용 하는 개념으로 원래의 모델에 영향을 주지 않음

 

Class

생성자 즉, 메모리에 올린다.

init으로 매개변수를 가진 생성자 메소드를 만들어여 매개변수를 넣어서 그 값을 가진 객체(Object)를 만들수 있음

class YoutuberClass {
	var name : String
	var subscriberCount : Int
    
	init(name: String, subscriberCount: Int) {
		self.name = name
		self.subscriberCount = subscriberCount
	}
}

값 넣기 전

var jungDaeRi = YoutuberClass(name: "정대리", subscriberCount: 999)
var jungDaeRiClone = jungDaeRi

print("값 넣기 전 : jungDaeRiClone.name : \(jungDaeRiClone.name)")
// 값 넣기 전 : jungDaeRiClone.name : 정대리

값 넣은 후

원래의 값 까지 같이 변경이 됨

jungDaeRiClone.name = "만쥬"

print("값 넣기 후 : jungDaeRiClone.name : \(jungDaeRiClone.name)")
// 값 넣기 후 : jungDaeRiClone.name : 만쥬
print("값 넣기 후 : jungDaeRi.name : \(jungDaeRi.name)")
// 값 넣기 후 : jungDaeRi.name : 만쥬

결론

클래스는 서로 연결(관계)이 되어 있어 영향을 받음

 

반응형