반응형
값 형식
정수, 실수, 불린, 문자와 같은 기본 자료형과 구조체, 열거형은 값 형식으로 분류합니다. 값 형식으로 선언된 값은 메모리의 스택 영역에 저장됩니다.
var a = 10

값 형식으로 저장된 값을 비교할 때는 스택에 저장된 실제 값을 비교합니다.
참조 형식
클래스, 클로저는 참조 형식으로 분류합니다. 참조 형식의 값을 저장하기 위해서는 스택과 힙 영역에 각각 하나씩 모두 두 개 메모리 공간이 필요합니다. 참조 형식 값은 힙 영역에 저장하고 스택 영역에는 힙 영역에 저장된 값의 주소가 저장됩니다.
var str:NSString

var : NSString = NSString(string: "hello")

참조 형식 값은 보통 큰 경우가 많아 주소를 전달합니다.
참조 형식 값 비교는 ==를 사용하고 스택 영역에 저장된 주소를 비교할 때는 항등 연산자(Identity Operator: ===)를 사용합니다.
박싱(Boxing)과 언박싱(Unboxing)
값 형식을 참조 형식으로 바꾸는 것이 박싱입니다.
// 정수형 변수 a를 NSArray 배열에 저장하려면
// NSNumber 클래스로 박싱 후 저장해야 함
let a = 123
let numObj = NSNumber(value: a)
var list = NSArray(object: numObj)
참조 형식을 값 형식으로 바꾸는 것이 언박싱입니다.
// NSNumber 클래스에 저장한 값은
// 메소트를 통해 값 형식으로 언박싱함
let a = 123
let numObj = NSNumber(value: a)
let value = numObj.intValue
박싱과 언박싱 과정에서 새로운 메모리 공간이 할당되어 성능에 영향을 줄 수 있으므로 꼭 필요한 경우에만 사용해야 합니다.
반응형
'프로그램 개발해서 돈벌기 > iOS' 카테고리의 다른 글
[Swift] SwiftUI에서 두 개 뷰에서 @Published, ObservableObject, @StateObjec, @EnvironmentObject를 이용한 데이터 Combine 사용하기 (0) | 2023.11.23 |
---|---|
SwiftUI에서 Class와 Struct 특징 및 차이점 (0) | 2023.11.22 |
메모리 개념과 사이즈 용어 및 메모리 영역별 사용처 (0) | 2023.11.19 |
SwiftUI에서 그리드 아이템을 한꺼번에 보여 주지 않고 12 개씩 나누어서 보여 주기 (0) | 2023.11.13 |
애플 App Store Connect에서 배포 중인 앱 중 iOS 버전별 이용자 수 확인하기 (0) | 2023.08.23 |
댓글