반응형
# 박싱
값형식을 참조 형식으로 변환하는 작업입니다.
박싱은 스택 메모리에 저장된 값을 힙 메모리에 새 객체를 할당하고 값을 복사해야하기 때문에 비용이 많이 든다.
int i = 1;
object o = i; // 박싱
# 언박싱
참조형식을 값 형식으로 변환하는 작업입니다.
언박싱은 박싱보다는 덜하지만 캐스팅 계산이 비용이 많이 든다.
언박싱을 할 때는 명시적 캐스팅을 진행해야합니다.
object o2 = 3;
int d = (int)o2;// 언박싱
아래처럼 제네릭을 사용하면 비용을 줄일 수 있다.
// 1) ArrayList (박싱/언박싱 발생)
ArrayList list = new ArrayList();
list.Add(10); // int → object (박싱)
int n = (int)list[0]; // object → int (언박싱)
// 2) List<T> (제네릭, 박싱 없음)
List<int> list2 = new List<int>();
list2.Add(10); // 값 형식 그대로 저장
int n2 = list2[0]; // 그대로 int 반환
더보기
In relation to simple assignments, boxing and unboxing are computationally expensive processes. When a value type is boxed, a new object must be allocated and constructed. To a lesser degree, the cast required for unboxing is also expensive computationally.
간단한 대입 연산에 비해, 박싱(boxing)과 언박싱(unboxing)은 계산적으로 비용이 많이 드는 과정입니다.
값 형식이 박싱될 때는, 새로운 객체를 할당하고 생성해야 합니다.
언박싱 시 필요한 캐스트 연산도, 정도는 덜하지만 계산적으로 비용이 많이 듭니다.
[참고자료]
반응형
'Language > C#' 카테고리의 다른 글
| [C#] C#에서 string 비교 연산 (0) | 2025.08.21 |
|---|---|
| [C#] static에 관한 글 (1) | 2025.07.21 |
| 인터페이스 (0) | 2025.03.04 |
| [C#] delegate (0) | 2025.02.28 |
| [C#] TextRPG (0) | 2025.02.13 |