반응형
Swift에서는 구조체와 클래스를 사용할 수 있는데 선언 방법이나 기능이 비슷해 차이점을 미리 숙지하지 않으면 디버깅할 때 곤란해질거 같아서 차이점을 정리해보려 한다.
차이점
1. 구조체는 상속을 할 수 없다.
2. 타입캐스팅은 클래스의 인스턴스에서만 사용할 수 있다
3. 클래스는 참조타입, 구조체는 값 타입
1,2번은 헷갈릴 일이 별로 없을거 같아서 3번 위주로 알아보겠다.
struct StructInfo {
let strName : String
var nNo : Int
init(strName : String, nNo : Int)
{
self.strName = strName
self.nNo = nNo
}
}
class ClassInfo {
let strName : String
var nNo : Int
init(strName : String, nNo : Int)
{
self.strName = strName
self.nNo = nNo
}
}
var sPerson : StructInfo(strName : "Struct", nNo : 1)
var sCopyPerson : StructInfo = sPerson
sCopyPerson.nNo = -100
print(nPerson.nNo) // 1
print(sCopyPerson.nNo) // -100
var cPerson : ClassInfo(strName : "Class", nNo :2)
var cCopyPerson : ClassInfo = cPerson
cCopyPerson.nNo = -100
print(cPerson.nNo) // -100
print(cCopyPerson.nNo) // -100
먼저 구조체 같은 경우에는 값을 복사하는 것이기 때문에 sCopyPerson의 프로퍼티를 변경했다고 sPerson의 프로퍼티가 바뀌지 않는 것을 확인할 수 있다.
반대로 클래스는 참조타입이므로 cCopyPerson의 프로퍼티를 변경했을 때 cPerson의 프로퍼티도 같이 바뀐다.
따라서 데이터 및 모델 객체는 구조체를 사용하는게 좋아보인다!!
반응형
'Language > Swift' 카테고리의 다른 글
Swift map, filter, reduce (0) | 2020.07.19 |
---|---|
Swift 클로저 (0) | 2020.07.17 |