티스토리 뷰
값? 참조?
이 두 단어가 무엇인지 이해하고 나면 거의 다 이해한거라 봐도 무방하다 생각합니다.
값타입은 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영역에 값이 다시 올라가게 됩니다.
+ 얕은복사와 깊은 복사
주소만 복사한다 == 얕은복사
값까지 모두 복사한다 == 깊은복사
'iOS > 스위프트' 카테고리의 다른 글
[Swift][Alamofire] Alamofire 어떤 녀석이고, 어떻게 사용할까? (0) | 2022.09.15 |
---|---|
[Swift][TDD] 테스트 주도 개발! + (테스트를 해야 하는 이유) (0) | 2022.09.08 |
[Swift][MVVM] MVVM의 진가는 테스트에서 나온다. (0) | 2022.07.22 |
[Swift][MVC] 애플 MVC 야무지게 사용해보기. (1) | 2022.07.19 |
[Swift][DI] 의존성 주입 라이브러리. (0) | 2022.07.12 |