하루에 0.01%라도 성장하자

Develop/iOS

Swift 클래스 와 구조체 ( Reference and Value )

뚠님 2019. 5. 9. 15:44
반응형

Swift

 

이번에는 클래스(Class)와 구조체, 열거형(Struct, enum)을 비교해 보겠다.

 

클래스(Class)

클래스는 참조타입(Reference Type) 이면서 상속이 가능하다.

 

구조체(Struct)

구조체는 값 타입(Value Type)이면서 상속이 불가능하다.

 

열거형(enum)

열거형은 값 타입(Value Type)이면서 상속이 불가능하다.

 

 

Reference and Value?

 

  • Reference
    • 데이터를 전달할 때 값의 메모리 위치를 전달.
  • Value
    • 데이터를 전달할 때 값을 복사하여 전달

 

코드로 알아보자~!

 

Struct ValueType{
    var tempVar = 1;
}

class ReferenceType{
    var tempVar = 1;
}


//Value Type

var firstVar = ValueType();
var secondVar = firstVar;
secondVar.tempVar = 100;

print("firstVar : \(firstVar)");  // 1 출력
print("secondVar : \(secondVar)");  // 100 출력


//Reference Type


var firstReferenceVar = ReferenceType();
var secondReferenceVar = firstReferenceVar;
secondReferenceVar.tempVar = 100;

print("firstReferenceVar : \(firstReferenceVar)");  // 100 출력
print("secondReferenceVar : \(secondReferenceVar)");  // 100 출력

 

코드로도 확인이 가능하겠지만 간단하게 설명하면,

구조체로 선언된 값은 값타입이기 때문에 복사가 되고, 각각의 저장소를 갖기 때문에 값을 변경해도 서로 영향이 없다.

 

클래스로 선언된 값은 참조타입이기 때문에 값이 있는 주소를 전달하게 되고, 하나의 주소를 공유하기 때문에 값을 변경하면 영향을 받는다.

 

 


 

이내용은 실무에서도 많이 사용되고 많은 개발자들이 실수하는 부분이기도 하다. 특히 클래스관련은 더더욱...

잊지말고 참고하도록 하자!

반응형

'Develop > iOS' 카테고리의 다른 글

Swift 클래스의 상속  (0) 2019.05.10
Swift 프로퍼티 (Property)  (0) 2019.05.09
Swift 열거형 (enum)  (0) 2019.05.08
Swift 구조체 (Struct)  (0) 2019.05.08
Swift 옵셔널(Optional)  (0) 2019.05.08