티스토리 뷰

값? 참조?

이 두 단어가 무엇인지 이해하고 나면 거의 다 이해한거라 봐도 무방하다 생각합니다.

 

값타입은 struct, 참조타입은 class입니다.

- struct

컴파일타임에 실행

값타입 = Stack영역에 저장됩니다.

그렇기에 Heap영역에 저장되는 참조타입보다 속도가 빠릅니다.

하지만 struct의 변수가 바뀌는 경우 Mutating되기에 메모리에 다시 할당됩니다.

struct는 변치 않는 고유값을 갖는 경우, 즉 struct내부의 변수가 바뀌지 않는 경우 사용하기 좋다 생각합니다.

 

- class

런타임에 실행

참조타입 = Stack영역에 Heap영역 주소를 저장합니다.

ARC가 메모리를 관리해줍니다.

상속이 가능하며 deinit을 사용하여 인스턴스 메모리를 해제할 수 있습니다.

struct보다 속도가 느립니다.

 

- 공통점

둘 다 extension이 가능합니다.

 

 

- class에서 값을 변경하는 경우.

만약 위와 같은 코드에서 사람의 속성이 변경되었다면? ( 물론 var 친구 = 사람 코드를 저 위치에 사용할 수 없습니다. )

101호 사는 사람 이름을 "이웃"으로 바꿔주세요.

그렇다면 친구의 이름또한 이웃으로 바뀔 것입니다.

둘이 가르키는 사람이 있는 주소는 101호이기 때문이죠.

 

그렇기에 같은 A인스턴스를 다른곳에서 공유한다면 101호 사람의 이름을 이웃으로 사용할 수 있을 것입니다.

( 주소 == 레퍼런스 )

- struct에서 값을 변경하는 경우, 위에서 말씀드린것과 같이 Mutating되어 Data영역에 값이 다시 올라가게 됩니다.

 

+ 얕은복사와 깊은 복사

주소만 복사한다 == 얕은복사

값까지 모두 복사한다 == 깊은복사

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함