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 형식은 모든 형식을 담을 수 있는 유연성을 제공하지만, 박싱과 언박싱 과정에서 성능 오버헤드가 발생할 수 있으므로 필요한 경우에 적절히 사용하는 것이 좋습니다.