Boxing ( 박싱 ) : 값 형식을 참조 형식으로 변환하는 것을 말한다. boxing은 암시적으로 발생한다.
( 예를 들어 int, float 를 object 로 변환하는 것을 말하는데 이 과정에서 단순 참조의 20배에 해당 하는 오버헤드와 메모리의 추가 사용이 발생한다. )
int test = 100;
object tetsObj = test;
UnBoxing ( 언박싱 ) : 참조 형식을 값 형식으로 변환하는 것을 말한다. Unboxing은 명시적으로 발생한다.
( 예를 들어 object를 int, float로 변환하는 것을 말하는데 이 과정에서 일반적인 할당의 4배에 달하는 시간이 소요된다. )
int test = 100;
object testObj = test;
int i = (int)test;
Boxing, Unboxing 이 사용되는 경우
void foo( int a ){}
void foo( int a, int b ) {}
void foo( int a, int b, int c ) {}
void foo(params object[] values) {}
동일한 함수이지만 인자의 개수가 유동적인 경우 params object[]를 사용하게 되는데 이때도 boxing이 발생한다.
int a = 100;
Debug.Log( a );
public class Debug {
public static void Log(object message)
}
인자 타입이 object인 함수의 경우에도 사용 시에 boxing이 발생한다.
public enum STATE
{
A = 1,
B = 2,
}
private void Start()
{
STATE a = STATE.A;
STATE b = STATE.B;
// Enum 비교 시 a, b가 boxing이 발생한다
if( a.Equals( b ) ){}
int ia = 1;
int ib = 2;
// 단순 enum 비교로 boxing이 발생하지 않는다
if( ia.Equals( ib ) ){}
}
사람의 입장에서는 enum으로 값을 비교하는 것과 int로 값을 비교하는 것에는 차이가 없어 보이지만 enum을 .Equals 로 비교하게 되면 내부적으로 object 비교가 발생하여 boxing이 발생한다.
'프로그래밍 언어 > C#' 카테고리의 다른 글
C# ?? 및 ??=, ?. 연산자 (0) | 2022.06.29 |
---|---|
C# static (정적) 메서드와 클래스 (0) | 2022.06.24 |
C# 제네릭 (C++ > 템플릿) (0) | 2022.06.13 |
C# Delegate Event 사용법 (0) | 2022.06.08 |
C# 사용자 정의 전환 연산자(암시적/명시적) (0) | 2022.06.08 |