Swift: Value Type / Reference Type (값 타입 / 참조 타입)

Wooyo·2023년 10월 18일
0
post-thumbnail

1. class / struct / enum 비교

  • class : 참조 / 상속 가능 / 확장 가능
  • struct: 값 / 상속 불가 / 확장 가능
  • enum: 값 / 상속 불가 / 확장 가능
  • 스위프트는 구조체 / 열거형 선호
  • Apple framework의 경우 대부분 class 사용

2. 구조체는 언제 사용하는가

  • 연관된 몇몇의 값들을 모아 하나의 데이터 타입으로 표현하고 싶은 경우
  • 다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할때
  • 자신을 상속할 필요가 없거나 자신이 다른 타입을 상속 받을 필요가 없을 때

3. value vs reference

  • value : 데이터를 전달할 때 값을 복사하여 전달
  • reference: 데이터를 전달할 때 값의 메모리 위치를 전달
struct Value {
	var pro = 1
}

class Ref {
	var pro = 1
}

// 첫 번째 구조체 인스턴스
let firstSt = Value()

// 두 번째 구조체 인스턴스 에는 첫 번째 복사
var secondSt = firstSt

// 두 번째 구조체 인스턴스 프로퍼티값 수정
secondSt.pro = 2

// 두 번째 인스턴스 프로퍼티값을 수정해도 첫 번째 인스턴스에는 영향없음
prict(secondSt.pro) // 2
prict(firstSt.pro) // 1

// 첫 번째 클래스 인스턴스
let firstClass = Ref()

// 두 번째 참조 변수에 첫 번째 참조 할당
let secondClass = firstClass
secondClass.pro = 2

// 첫 번째 참조 인스턴스의 프로퍼티가 수정된다.
print(firstClass.pro) // 2
print(secondClass.pro) // 2

4. 스위프트의 데이터 타입 비교

// 대부분 구조체로 구성
public struct Int
public struct Double
public struct String
public struct Dictionary<Key: Hashable, Value>
public struct Array<Element>
public struct Set<Element: Hashable>
profile
Wooyo의 개발 블로그

0개의 댓글