Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# object 데이터 형식이란? 개념부터 박싱·언박싱까지 쉽게 이해하기

C#에서 object 형식은 값 형식(value type), 참조 형식(reference type), 미리 정의된 형식, 사용자 정의 형식 등 모든 형식의 값을 할당할 수 있는 특별한 데이터 형식입니다. 다만 값을 할당하기 전에는 반드시 형식 변환(type conversion) 과정이 필요합니다.

object 형식의 기본 개념

object 형식은 C# 공용 형식 시스템(Common Type System, CTS)에서 모든 데이터 형식의 최상위 기본 클래스입니다. 즉, C#의 모든 형식은 궁극적으로 object에서 파생됩니다. 여기서 'object'는 System.Object 클래스의 별칭(alias)입니다.

박싱(Boxing)과 언박싱(Unboxing)

object 형식을 사용할 때 가장 중요한 개념이 바로 박싱과 언박싱입니다.

  • 박싱(Boxing): 값 형식을 object 형식으로 변환하는 것
  • 언박싱(Unboxing): object 형식을 다시 값 형식으로 변환하는 것

다음은 박싱의 간단한 예입니다.

object obj;
obj = 100; // 값 형식 100이 object로 변환되는 박싱

object 데이터 형식 활용 예제

아래는 object 형식의 실제 사용법을 보여주는 전체 예제 코드입니다.

예제 코드

using System;
using System.IO;

namespace Demo {
    class objectClass {
        public int x = 200;
    }

    class MyApplication {
        static void Main() {
            object obj;
            obj = 50; // 박싱 발생
            Console.WriteLine(obj);
            Console.WriteLine(obj.GetType());
            Console.WriteLine(obj.ToString());

            obj = new objectClass();
            objectClass newRef;
            newRef = (objectClass)obj; // 명시적 형식 변환
            Console.WriteLine(newRef.x);
        }
    }
}

실행 결과

50
System.Int32
50
200

코드 설명

위 예제에서 obj = 50; 구문은 int 값 형식 50을 object에 할당하면서 박싱이 일어납니다. 이후 obj.GetType()을 호출하면 실제 저장된 형식인 System.Int32가 출력되는 것을 확인할 수 있습니다.

또한 object 변수에 클래스 인스턴스를 할당한 뒤, (objectClass)obj처럼 명시적 캐스팅(언박싱)을 통해 원래 형식으로 되돌릴 수 있습니다. 변환된 객체의 필드 값 200이 정상적으로 출력되는 것을 볼 수 있습니다.

이처럼 C#의 object 형식은 모든 형식을 담을 수 있는 유연성을 제공하지만, 박싱과 언박싱 과정에서 성능 오버헤드가 발생할 수 있으므로 필요한 경우에 적절히 사용하는 것이 좋습니다.