[C#] 박싱(Boxing), 언박싱(Unboxing)PROGRAMMING/03. C#2024. 4. 8. 18:20
Table of Contents
반응형
박싱(Boxing) 이란?
값 형식의 데이터를 참조 형식으로 변환하는 것이다.
- 항상 할당과 복사를 하기 때문에 Overhead를 초래할 가능성이 있다.
1
2
3
|
int a = 10; (값형식)
Object b = a; (참조형식)
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
List<object> list = new List<object>();
list.Add("First"); // String도 참조형식이기 때문에 Boxing은 일어나지 않는다.
for (int i = 1; i < 5; i++)
list.Add(i); // Boxing : i는 int형이기 때문에 object로 변환한 것이기 때문에 Boxing이 일어난다
list.Add("Second");
for (int i = 5; i < 10; i++)
list.Add(i);
foreach (var item in list) // var : 무슨 자료형이 나올지 모르기 때문에 컴파일에게 판단을 맡기는 것
|
cs |
언박싱(Boxing) 이란?
참조 형식의 데이터를 값 형식으로 변환하는 것이다. 박싱과 반대이다.
1
2
3
4
5
|
int a = 10;
Object b = a;
int c = (int) b;
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
List<object> list = new List<object>();
list.Add("First");
for (int i = 1; i < 5; i++)
list.Add(i);
list.Add("Second");
for (int i = 5; i < 10; i++)
list.Add(i);
int sum = 0;
string str = "";
for(int i = 1; i < 5; i++)
{
sum += (int)list[i] * (int)list[i]; // Unboxing (int -> object -> int)
str += (string)list[i]; // 언박싱도아니고, 다운캐스팅도 실패(int -> object -> string)
}
|
cs |
박싱과 언박싱이 가능한 이유
C#의 모든 자료형은 object로 부터 기본 상속이 되어있기 때문이다. 모든 타입은 모두의 부모 객체인 object로 변환 가능하다.
object타입이 참조형식이고, object형으로 형변환이 일어나는 것을 박싱이라고 하고, object에서 다시 원 상태로 복귀시키는 것을 언박싱이라고 한다.
출처 및 참고: 강의 짱잘하시는 울 유니티 선생님 수업
반응형
@HYUNJZZANG :: HyunZzang
HyunZzang의 프로그래밍 공간 / 함께 공부해요!!
도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다 :)