값 유형의 가장 기본 기능은 데이터의 고유한 복사본을 가진 독립 인스턴스
를 생성하며 복사된다는 것이다. 메모리의 스택
에 저장된다.
// Value type example
struct S { var data: Int = -1 }
var a = S()
var b = a // a is copied to b
a.data = 42 // Changes a, not b
println("\(a.data), \(b.data)") // prints "42, -1"
스위프트 타입 중 값 타입은 아래와 같다.
반면 참조타입은 복사는 공유 인스턴스
를 생성해주게 된다. 복사 후 두 변수는 데이터의 단일 인스턴스를 참조하므로 두 번째 변수의 데이터를 수정하면 원본에도 영향을 준다. 데이터는 메모리의 힙, 주소값은 스택 영역에 저장된다.
// Reference type example
class C { var data: Int = -1 }
var x = C()
var y = x // x is copied to y
x.data = 42 // changes the instance referred to by x (and y)
println("\(x.data), \(y.data)") // prints "42, 42"
참조 유형보다 값 유형
이 주로 선택되는 이유 중 하나는 코드에 대해 더 쉽게 추론
할 수 있기 때문이다. 이런 특징은 다른 스레드가 사용자의 데이터를 변경할 수 있는 다중 스레드 환경
에서 특히 유용하다.
스위프트 타입 중 참조 타입은 아래와 같다.
다음은 Copy-on-Write