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 안에 있는 클래스변수까지 영향을 받는다.