본문 바로가기
프로그램 개발해서 돈벌기/iOS

메모리에 표시되는 값 형식과 참조 형식

by ubmuhan 2023. 11. 19.
반응형

값 형식

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

 

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

 

 

박싱과 언박싱 과정에서 새로운 메모리 공간이 할당되어 성능에 영향을 줄 수 있으므로 꼭 필요한 경우에만 사용해야 합니다.

 

 

반응형

댓글