| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 독서
- Toy Project
- multi-thread
- Unity
- c#
- BOJ
- System Programming
- Online Judge
- PS
- Network Programming
- Data Structure
- C++
- git
Archives
- Today
- Total
I'm FanJae.
[20260512] C# ( Boxing & UnBoxing ) 본문
1. 박싱(Boxing)
(1) 정의
- 값 형식을 참조 형식으로 변환하는 과정이다.
- 대표적인 사례에는 ArrayList 가 있다. ArrayList 는 내부적으로 object 를 저장한다.
ArrayList list = new ArrayList();
list.Add(90);
- 90은 원래 int 값 형식이다.
- 하지만 ArrayList 는 object 만 저장할 수 있다. 따라서 변환이 일어난다.
object obj = 90;
- 이와 같은 변환의 과정을 박싱(Boxing) 이라고 한다.
2. 언박싱(Unboxing)
(1) 정의
- 참조 형식을 다시 값 형식으로 꺼내는 과정이다.
int score = (int)obj;
- object 안에 들어있던 실제 int 값을 다시 꺼내오는 과정이다.
- 이것을 언박싱(Unboxing)이라고 한다.
3. 박싱 / 언박싱의 문제점
(1) 추가 메모리 사용
- 박싱 시 값이 힙 메모리에 복사된다.
- 언박싱 시 다시 값 형식으로 복사된다.
(2) 성능 비용 발생
- 변환 과정 자체가 추가 비용이다.
- 반복적으로 발생하면 성능에 영향을 줄 수 있다.
(3) 런타임 오류 가능성
object obj = "FanJae";
int number = (int)obj;
- 이와 같이 잘못 형변환하면 실행 중 오류가 발생한다.
- 정확하게는 런타임에 InvalidCastException이 발생한다.
(4) 성능 차이 분석
- 아래 예제는 100,000,000 개의 데이터를 넣을 때 걸리는 소요 시간을 출력한다.
// 1억개의 데이터를 넣는 과정에 대한 소요 시간
const int iteration = 100000000;
Stopwatch sw = new Stopwatch();
ArrayList arrayList = new ArrayList();
sw.Start();
for(int i=0; i<iteration; i++)
{
arrayList.Add(i); // int -> object 박싱
}
sw.Stop();
Console.WriteLine($"{sw.ElapsedMilliseconds}");
sw.Reset();
List<int> genericlist = new List<int>();
sw.Start();
for(int i=0; i<iteration; i++)
{
genericlist.Add(i);
}
sw.Stop();
Console.WriteLine($"{sw.ElapsedMilliseconds}");

- 이처럼 특정 값이 박싱되는 과정에서 상당히 많은 비용이 발생함을 확인할 수 있다.
- 따라서 박싱 / 언박싱이 일어나지 않게 하는 것이 좋다.
'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260513] C# ( HashTable 와 Dictionary의 공통점, 차이점 ) (0) | 2026.05.13 |
|---|---|
| [20260513] C# ( 제네릭 제약 ) (0) | 2026.05.13 |
| [20260512] C# ( List ) (0) | 2026.05.12 |
| [20260512] C# ( 제네릭 프로그래밍 ) (0) | 2026.05.12 |
| [20260511] C# ( 객체지향 설계 5대 원칙 SOLID ) (0) | 2026.05.11 |
Comments