object 형식
• 모든 데이터 형식(프로그래머들이 만드는 데이터 형식마저도)이 자동으로 object 형식으로부터 상속받음
• 즉 object형식은 모든 데이터 형식의 부모
• 따라서 컴파일러는 어떤 형식의 데이터라도 object에 담아 처리 가능
• obect형식은 참조형식
ex) object a = 123; object b = "hello" 모두 가능
박싱과 언박싱
obect형식은 참조형식이기 때문에 힙에 데이터를 할당, int 나 double은 값 형식이기 때문에 스택에 할당
그럼 값 형식 데이터를 object형식에 담으면 어디에 할당될까 스택? 힙?
object가 값 형식의 데이터를 힙에 할당하기 위해 "박싱 기능" 제공
박싱 : 값 형식을 object 형식에 담아 힙에 올리기
object a = 20;
이라면 20은 박스에 담겨 힙에 할당, a는 참조로써 힙에 저장된 20의 위치를 가리킴
언박싱 : 힙에 올라가 있는 데이터를 object에서 꺼내 값 형식 변수(스택)으로 옮기기
object a =20;
int b = (int)a;
b는 a가 참조하고 있는 메모리로부터 값을 복사하려고 함. 이 때 박싱된 값을 꺼내 값 형식 변수 b에
저장하는 과정을 "언박싱"이라고 함
using System;
class MainApp
{
static void Main(stringp[] args)
{
int a = 123;
object b = (object)a; // a에 담긴 값을 박싱해서 힙에 저장
int c = (int) b; // b에 담긴 값을 언박싱 해서 스택에 저장
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
실행 결과
123
123
123