반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

Class 안의 Struct와 Struct 안의 Class ! 본문

오뚝이 개발자/swift

Class 안의 Struct와 Struct 안의 Class !

rriver2 2022. 7. 14. 22:48
반응형

Class와 Struct에 대해서 공부하다보니까 궁금한게 생겼다.. 

관련 블로그 링크 : struct와 class의 차이Copy On Write와 Copy On Assign

 

 질문 

Class의 property로 있는 Struct은 Class의 인스턴스를 만들고 복사한 후 값을 변경하면 달라질까?

반대로 Struct의 propert로 있는 Class는 Struct의 인스턴스를 만들고 값을 복사한 후 값을 변경하면 달라질까?

 

 말로하면 어려우니 코드를 보자.. ㅎㅎ 

1) 이렇게 하면 class1.structInstance.number와 class1_Copy.structInstance.number는 값이 같을까?

struct Struct1 {
    var number = 2
}
 
class Class1 {
    var number = 1
    var structInstance = Struct1()
}
 
let class1 = Class1()
let class1_Copy = class1

class1_Copy.structInstance.number = 0

 

직접 해보니까 값이 같았다. 

print(class1.structInstance.number) // 2
print(class1_Copy.structInstance.number) // 2

class1_Copy.structInstance.number = 0

print(class1.structInstance.number)  // 0
print(class1_Copy.structInstance.number) // 0

이건 그림으로 그려보면

그래서 주소값도 똑같이 나온다 !

withUnsafePointer(to: &class1.structInstance.number) {
    print("\($0)") // 0x0000600000309c78
}
withUnsafePointer(to: &class1_Copy.structInstance.number) {
    print("\($0)") // 0x0000600000309c78
}

 

 

 

2) 반대로 이렇게 하면 struct2.classInstance.number와 struct2_Copy.classInstance.number는 값이 같을까?

class Class2 {
    var number = 2
}
 
struct Struct2 {
    var number = 1
    var classInstance = Class2()
}
 
let struct2 = Struct2()
var struct2_Copy = struct2
 
struct2_Copy.classInstance.number = 0

 

이것도... 값이 같았다..

print(struct2.classInstance.number)
print(struct2_Copy.classInstance.number)
struct2_Copy.classInstance.number = 0
print(struct2.classInstance.number)
print(struct2_Copy.classInstance.number)

그림을 그려보면

그래서 주소값도 똑같이 나온다 !

withUnsafePointer(to: &struct2.classInstance.number) {
    print("\($0)") // 0x00006000003199b0)
}
withUnsafePointer(to: &struct2_Copy.classInstance.number) {
    print("\($0)") // 0x00006000003199b0)
}

 


느낀점

생각했던 거랑 좀 달랐어서 신기했다 ! 이전 프로젝트에서 골머리를 앓았던 적이 있었는데 이유를 모르고 넘어갔던 부분을 이렇게 발견할 수 있게 되어서 넘 기쁘다.. 🥹 성장의 즐거움이란... 😆

반응형
Comments