본문 바로가기

[C#] 박싱과 언박싱

@Xenawn2025. 8. 18. 11:08
반응형

# 박싱

값형식을 참조 형식으로  변환하는 작업입니다.

박싱은 스택 메모리에 저장된 값을 힙 메모리에 새 객체를 할당하고 값을 복사해야하기 때문에 비용이 많이 든다.

	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)은 계산적으로 비용이 많이 드는 과정입니다.
값 형식이 박싱될 때는, 새로운 객체를 할당하고 생성해야 합니다.
언박싱 시 필요한 캐스트 연산도, 정도는 덜하지만 계산적으로 비용이 많이 듭니다.

 

[참고자료]

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing?utm_source=chatgpt.com

반응형

'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
Xenawn
@Xenawn :: Xenawn

제넌 게임개발 블로그

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차