C#에서의 모든 형식은 Object로부터 상속됩니다. 값 형식이나 참조 형식, 사용자 정의 형식 모두 Object로부터 상속됩니다. 따라서 Object는 모든 형식으로 변환이 가능합니다. 물론 그 반대도 가능합니다. 이번 포스팅에서는 Object의 이런 특성에 대해서 정리했습니다.
object 타입의 박싱(Boxing)과 언박싱(Unboxing)
Object 또는 object는 어떠한 값이라도 할당받을 수 있습니다. 값 형식의 변수가 object 타입으로 변환되는 것을 박싱(Boxing)이라고 합니다. 반대로 object타입이 값 형식으로 변환되는 것을 언박싱(Unboxing)이라고 합니다. 언박싱의 경우 (int)object와 같은 명시적인 캐스팅이 필요합니다. 다음은 박싱과 언박싱의 예를 보여줍니다.
int a = 10;
object obj = a; //박싱(Boxing)
int b = (int)obj; //언박싱(Unboxing)
object 타입은 참조형식이기 때문에 박싱할 경우 힙에 데이터가 저장됩니다. 반면 int나 float같은 타입은 값 형식이기 때문에 언박싱할 경우 스택에 저장됩니다. 이렇게 서로 저장되는 영역이 다르기 때문에 각각 다른 값을 저장할 수 있습니다.
다음은 이에 대한 예제를 보여줍니다.
using System;
namespace Object_exam
{
internal class Program
{
static void Main(string[] args)
{
int a = 10;
object obj = a; // a값을 박싱하여 obj로 복사합니다.
a = a + 20; // a의 값을 변경합니다. obj는 변하지 않습니다.
int b = (int)obj; // obj의 값을 언박싱하여 b로 복사합니다.
// a의 값이 변해도 obj에 저장된 값은 영향을 받지 않습니다.
Console.WriteLine($"The value-type value a = {a}");
Console.WriteLine($"The object-type value obj = {obj}");
Console.WriteLine($"The object-type value b = {b}");
object c = obj;
obj = 30;
Console.WriteLine($"The object-type value obj = {obj}");
Console.WriteLine($"The object-type value c = {c}");
}
}
}
결과
The value-type value a = 30
The object-type value obj = 10
The object-type value b = 10
The object-type value obj = 30
The object-type value c = 10
[Review]
"초보자를 위한 C# 200제(2판)" / 저자 : 강병익
'Program Language > C#' 카테고리의 다른 글
Part2. C# 기초 다지기(1. 배열) (16) | 2023.02.03 |
---|---|
Part1. C# 첫발 내딛기(32. 조건문) (10) | 2023.02.03 |
Part1. C# 첫발 내딛기(30. Nullable Type) (8) | 2023.01.29 |
Part1. C# 첫발 내딛기(29. default를 이용한 변수 초기화) (8) | 2023.01.26 |
Part1. C# 첫발 내딛기(28. Null 조건 연산자 '?') (4) | 2023.01.24 |
댓글