[swift] Reference and Value Types

GOSARI·2021년 11월 4일
0

swift

목록 보기
7/11

값 타입(Value Type)

값 유형의 가장 기본 기능은 데이터의 고유한 복사본을 가진 독립 인스턴스를 생성하며 복사된다는 것이다. 메모리의 스택에 저장된다.

// 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"

스위프트 타입 중 값 타입은 아래와 같다.

  • struct, enum
  • Int, Double, String과 같은 기초 타입(Fundamental types)
  • Array, Set, Dictionary와 같은 컬렉션 타입(Collection types)
  • 값 타입으로 구성된 tuple

참조 타입(Reference Type)

반면 참조타입은 복사는 공유 인스턴스를 생성해주게 된다. 복사 후 두 변수는 데이터의 단일 인스턴스를 참조하므로 두 번째 변수의 데이터를 수정하면 원본에도 영향을 준다. 데이터는 메모리의 힙, 주소값은 스택 영역에 저장된다.

// 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"

참조 유형보다 값 유형이 주로 선택되는 이유 중 하나는 코드에 대해 더 쉽게 추론할 수 있기 때문이다. 이런 특징은 다른 스레드가 사용자의 데이터를 변경할 수 있는 다중 스레드 환경에서 특히 유용하다.

스위프트 타입 중 참조 타입은 아래와 같다.

  • class
  • closure

다음은 Copy-on-Write

0개의 댓글