박싱 vs 언박싱

Minsang Kim·2023년 11월 1일
0

오늘으 질문

박싱과 언박싱에 대하여 설명해주세요.

오늘으 답변

박싱은 값 타입을 참조 타입으로 변환하는 것을, 언박싱은 참조 타입을 값 타입으로 변환하는 것을 의미합니다. 박싱과 언박싱은 변환 과정에서 스택 메모리와 힙 메모리 간의 데이터 복사가 되고, 가비지도 남아 성능 문제를 일으킬 수 있기 때문에 사용시 주의해야 합니다.

+ TMI

값 타입은 스택 메모리에 저장되고, 참조 타입은 힙 메모리에 저장된다.
값 타입이 직접 값이 저장된다면, 참조 타입은 데이터에 대한 참조가 저장된다.

참조 타입은 처음 변수를 선언하면 값 타입과 달리 메모리가 생성되지 않는다.
이후 생성시에 힙 메모리에 할당되고, 참조만 스택 메모리에 저장된다.

예시

int i = 12;
object o = i;		// 박싱
int j = (int)o;		// 언박싱

i = 34;
					=> i = 34, o = 12

박싱은 System.object를 이용한 암시적인 방식, 언박싱은 명시적인 방식이다.

박싱을 통해 원래 값 타입과 박싱된 개체에 개별 메모리 위치를 사용해 서로 다른 값을 저장할 수 있다.

null을 언박싱하려고 하면 NullReferenceException 발생.
호환되지 않는 값 형식에 대한 참조를 언박싱하려고 하면 InvalidCastException 발생.

profile
게임만 하다가 개발자로

0개의 댓글