[Swift] 값타입참조타입스택영역힙영역
값타입 / 참조타입, 스택영역 / 힙영역
Swift를 공부하는 사람이라면 지겹게 들어왔고 듣고있고 아패로도캐속 듣게 될...면접 단골 질문이라는 이 키워드
자유의 모미 되고 싶어서 한번 정리를 해보겠습니다.
값타입과 참조타입의 차이?
값타입은 선언할 때마다 값을 복사해서 사용한다. 원본에 영향이 없다.
참조타입은 원본의 주소값을 가리킨다. 변경시 원본도 변경된다.
let a = Person()
let b = a
위 상황에서 b
는 a인스턴스가 위치한 주소
를 가리키고 있다.
b의 프로퍼티
를 변경한다면 b가 가리키는 주소값
에 위치한 a의 데이터
가 변경된다.
그렇다면 아래의 경우는 어떨까?
class Person {
var name = ""
var age = 100
}
let a = Person()
let b = a
b.name = "horeng"
let
으로 선언된 b
의 프로퍼티
를 변경하려고 한다.
가능할까?
네
이런 경우 let
으로 선언해서 불변값이 되는 것은 b가 가리키고 있는 주소
일 뿐이다.
let a = Person()
let another = Person()
let b = a
b = another
이런 게 안된다는 것...
즉, let으로 클래스를 선언한다는 것
은 선언할 때 넌 이 주소만 가리키도록 해! 변경 불가능함! 땅땅땅 하는 것이다. 아무것도 갖지 않는 화살표일뿐!
그렇다면 참조되고 있는 a 인스턴스가 사라지면 b는 어떻게 되는 걸까?
이건 ARC를 알아봐야 하는데, ARC에 대한 내용은 아래 링크로 보면 볼 수 있다.
(나중에 ARC 관련 글 블로깅 한다음에 링크 걸 자리)...ㅎㅎ
- 스택영역과 힙 영역의 차이?
- 왜 두 영역이 구분되어있을까?
기본적으로 구조체 선택하라고 써놓은 이유?
아이덴티티를 사용할때 클래스를 사용하라는 이유는?
클래스가 이니셜라이저가 필요한 이유는?
참조되는 프로퍼티가 사라지면 어떻게 될까?
(수정중. )
Author And Source
이 문제에 관하여([Swift] 값타입참조타입스택영역힙영역), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@horeng2/Swift-값타입참조타입스택영역힙영역저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)