public class TestBlog
{
static void Main(string[] args)
{
object a = 10;
}
}
위 코드는"정수형"인 10을 담은 "object" 형식에 변수 a입니다
그럼 a에 담겨진 저 10이라는 값은 어디 메모리에 할당될까요?
우리는 object형식은 참조형식이기 때문에 힙메모리에 할당될 것이라고 생각할 것 입니다.
실제로도 힙메모리에 할당되지만, 뭔가 좀 이상합니다. 10이라는 "정수"는 int나 long, float같은 값 형식에 담을 수 있는 데이터인데 값 형식이 참조형식으로 바뀌는 상황이 발생합니다.
우리는 이를 박싱이라고 부르는데요.
Boxing(박싱)
값형식 데이터를 참조형식 변환해 힙메모리에 할당하는 것을 말합니다.
그럼 반대로 언박싱은 박싱된 값을 다시 사용하는 뜻이겠죠?
Unboxing(박싱)
박싱된 값을 다시 값형식으로 바꾸어 쓰는걸 말합니다.
즉, object형식에 값형식을 넣으면 박싱이 되어 힙메모리에 할당되는 현상을 박싱이라 부르고 이를 다시 꺼내 써오는걸 언박싱이라고 부릅니다. 그렇기 때문에 언박싱은 값복사가 일어나죠.
박싱 & 언박싱의 장단점
장점:
값 형식을 참조형식으로 변환하며 코드의 유연성을 늘릴 수 있습니다.
단점:
박싱과 언박싱은 힙메모리 할당과 가비지 컬렉션을 유발하기 때문에 당연히 성능저하가 일어납니다.
런타임 중에 언박싱 타입 불일치로 예외가 발생할 수 있습니다.
그래서 우리는 박싱과 언박싱의 개념을 안 채로 코드의 유연성과 성능 사이에 적정선을 찾아야합니다
하지만 저는 웬만하면 박싱이 일어나지 않게 코드를 짜는걸 추천하긴 합니다.
아무튼 이상 박싱과 언박싱이였습니다.
'개발관련 > C# (초급)' 카테고리의 다른 글
| [C#] == 연산자와 Equals, ReferenceEquals🤓 (0) | 2026.05.04 |
|---|