박싱

    C# 구조체가 IEquatable<T>를 상속해야 하는 이유

    C#의 모든 타입의 최상위 클래스인 Object에는 .Equals(object) 메소드가 존재한다. 그리고 이를 통해 다른 값과의 동일 비교를 수행할 수 있다. 구조체나 클래스를 직접 정의하고, 해당 객체로 .Equals(object)를 호출하면 object.Equals(object)가 호출된다. 박싱 int a = 1; object oa = a; Value Type을 object 타입으로 캐스팅하면 박싱이 일어난다. IL_0001: ldc.i4.1 IL_0002: stloc.0 IL_0003: ldloc.0 IL_0004: box [mscorlib]System.Int32 IL_0009: stloc.1 디스어셈블러를 통해 CIL 코드를 열어보면 위와 같이 확인할 수 있다. .Equals(object)에서..

    C# Boxing Unboxing 박싱 언박싱 값>참조, 참조>값

    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;..