Swift Struct vs Class : Class

2021. 2. 24. 23:57카테고리 없음

struct : value (값)

class :  reference (참조)

 

Class 안에 변수로 Struct가 있거나 Struct안에 class가 변수로 있으면


Class안에 Struct가 있는 경우 

class Musk_c {
  var isCeo = true
  var tesla = Tesla_s()
}
 
struct Tesla_s {
  var isCar = true
}
 
var aclass = Musk_c()
var bclass = aclass
 
bclass.tesla.isCar = false
bclass.isCeo = false
 
print(aclass.tesla.isCar)  // false
print(aclass.isCeo) // false

 

class 이름 Musk_c 안에는  bool 변수  isCeo 와  struct 변수 Tesla_s 를 가지고 있다.

두개의 인스턴스를 만들어 값을 출력 해보았다.

class 는 레퍼런스 참조이므로

bclass안의 bool 변수 isCeo 는 값을 변경하니 aclass 도 변경 되었다.

blcass안의  struct 변수 tesla 안의  bool 변수 isCar 값을 변경하니 aclass 도  변경되었다

 

즉 부모인  class reference 가 복사 되어 그대로 참조 되는것이다 ? 말로 설명하기 애매하군

 


Struct안에 Class가 있는 경우

class Musk_c {
  var isCeo = true
}
 
struct Tesla_s {
  var isCar = true
  var musk = Musk_c()
   
}
 
var a_struct = Tesla_s()
var b_struct = a_struct
 
b_struct.musk.isCeo = false
b_struct.isCar = false
 
print(a_struct.musk.isCeo)  // false
print(a_struct.isCar) // true

위와 비슷하게 이번엔 Teslas_s struct 에 musk 클래스를 선언해두었다.

두개의 인스턴스를 만들어 값을 출력 해보았다.

Teslas_s  안에 있는 Boolean타입의 변수 isCar 는 call by value로 값이 복사되었기 때문에 b_struct 의 값을 바꿔도 a_struct 의 값이 변경되지 않았다.

반면에 Struct 안에 있는 Class 변수는 값이 변경 되었다.

Struct안에 Class가 있는경우 해당 클래스는 reference로 복사가 일어난다 

a_struct, b_struct 두개의 변수가 생성될 때 Struct기 때문에 value가 복사된다.

하지만 Struct안에 Class변수가 있어서 해당 Class변수는 reference가 복사된 것이다.

그래서 b_struct 변수의 클래스 내부 변수의 값을 변경하게 되면 a_struct 안에 있는 클래스변수까지 영향을  받는다.