[Swift] 값타입참조타입스택영역힙영역

값타입 / 참조타입, 스택영역 / 힙영역

Swift를 공부하는 사람이라면 지겹게 들어왔고 듣고있고 아패로도캐속 듣게 될...면접 단골 질문이라는 이 키워드

자유의 모미 되고 싶어서 한번 정리를 해보겠습니다.


값타입과 참조타입의 차이?

값타입은 선언할 때마다 값을 복사해서 사용한다. 원본에 영향이 없다.

참조타입은 원본의 주소값을 가리킨다. 변경시 원본도 변경된다.

let a = Person()
let b = a

위 상황에서 ba인스턴스가 위치한 주소를 가리키고 있다.
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 관련 글 블로깅 한다음에 링크 걸 자리)...ㅎㅎ






  • 스택영역과 힙 영역의 차이?
  • 왜 두 영역이 구분되어있을까?

기본적으로 구조체 선택하라고 써놓은 이유?
아이덴티티를 사용할때 클래스를 사용하라는 이유는?

클래스가 이니셜라이저가 필요한 이유는?
참조되는 프로퍼티가 사라지면 어떻게 될까?

(수정중. )

좋은 웹페이지 즐겨찾기