iOS
[iOS][swift] class와 struct
A든
2021. 12. 15. 21:53
struct
import UIKit
struct ItemStruct {
var name : String
var age : Int
}
var devJun = ItemStruct(name: "성준", age: 29)
var devJunTest = devJun
print("devJunTest.name : \(devJunTest.name)")
devJunTest.name = "문식쿤"
print("devJunTest.name : \(devJunTest.name)")
print("devJun.name : \(devJun.name)")
class
import UIKit
// class
class ItemClass {
var name : String
var age : Int
// 생성자 - 즉 메모리에 올린다.
// init으로 매개변수를 가진 생성자 메소드륾 만들어야
// 매개변수를 넣어서 그 값을 가진 객체를 만들 수 있다.
init(name: String, age: Int){
self.name = name
self.age = age
}
}
var aidenKim = ItemClass(name: "성준", age: 29)
var aidenKimTest = aidenKim
print("값 넣기 전 aidenKimTest.name : \(aidenKimTest.name)")
aidenKimTest.name = "문식쿤"
print("값 넣은 후 aidenKimTest.name : \(aidenKimTest.name)")
print("값 넣은 후 aidenKim.name : \(aidenKim.name)")
Classes support a few more capabilities that structs don’t have:
- Classes are reference types and structs are value types
That last point is important: classes are reference types, and structs are value types. Here’s what’s what:
- Value Type: When you copy a value type (i.e., when it’s assigned, initialized or passed into a function), each instance keeps a unique copy of the data. If you change one instance, the other doesn’t change too.
- Reference Type: When you copy a reference type, each instance shares the data. The reference itself is copied, but not the data it references. When you change one, the other changes too.
Value Type은 각 하나의 유니크한 벨류를 갖게 된다.
Reference Type에서 보앗듯이 어떤 한 데이터 값을 바꾼다면, 다른곳에서도 그 데이터 값이 자동적으로 바뀐다.
그렇다면 언제 struct를 쓰고, 언제 class를 쓰는게 좋을까?
먼저 struct는 간단한 데이터 타입들을 쓸 때, 스레드에서의 안정성이 필요할 때, 그리고 상속이 필요 없을 때 쓰이며,
class는 생명주기에서 모든 영향을 줄 때, 예를 들면, DatabaseConnection 또는 TemporaryFile 등에 쓰일때 그리고 또 다른 카피가 필요 없을 때, 예를들면, API 또는 온라인 소스 reference 등에 쓰일 때이다.
참고로 struct에서 class 혹은 class에서 struct로 바꿀 수 있다.
*개발하는 정대리 유튜브를 참고하였습니다.