본문 바로가기

Language/Swift

Swift 구조체와 클래스의 차이

반응형

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