값타입 / 참조타입, 스택영역 / 힙영역
자유의 모미 되고 싶어서 한번 정리를 해보겠습니다.
값타입은 선언할 때마다 값을 복사해서 사용한다. 원본에 영향이 없다.
참조타입은 원본의 주소값을 가리킨다. 변경시 원본도 변경된다.
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으로 클래스를 선언한다는 것
은 선언할 때 넌 이 주소만 가리키도록 해! 변경 불가능함! 땅땅땅 하는 것이다. 아무것도 갖지 않는 화살표일뿐!
이건 ARC를 알아봐야 하는데, ARC에 대한 내용은 아래 링크로 보면 볼 수 있다.
(나중에 ARC 관련 글 블로깅 한다음에 링크 걸 자리)...ㅎㅎ
기본적으로 구조체 선택하라고 써놓은 이유?
아이덴티티를 사용할때 클래스를 사용하라는 이유는?
클래스가 이니셜라이저가 필요한 이유는?
참조되는 프로퍼티가 사라지면 어떻게 될까?
(수정중. )