boxing 및 unboxing을 사용하면 값 형식을 개체로 처리할 수 있습니다. |
boxing은 가비지 수집되는 힙에 값 형식을 저장하는 데 사용됩니다. boxing은 값 형식(C# 참조)을 object 형식 또는 해당 값 형식에서 구현된 임의의 인터페이스 형식으로 변환하는 암시적 변환입니다. 값 형식을 boxing하면 힙에 개체 인스턴스가 할당되고 값이 새 개체에 복사됩니다. |
unboxing은 object 형식에서 값 형식으로, 또는 인터페이스 형식에서 해당 인터페이스를 구현하는 값 형식으로의 명시적 변환입니다. unboxing 연산 과정은 다음과 같습니다. |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 값타입과참조타입
{
class Program
{
static void Main(string[] args)
{
//값형식 : value Type : 닷넷이 관리하는 메모리의 스택에 보관
int i = 1234;
//참조 형식 : Reference : 닷넷의힙 메모리에 보관
string s = "안녕\0하세요"; //리터럴(Literal)
Console.WriteLine("{0}",s);
//박싱Boxing과 언박싱UnBoxing 값 형식을 기반으로 한 변수에는 값이 직접 포함됩니다.
string su = "1234";
int num = Convert.ToInt32(su); // 힙 -> 스택 : 언박싱 ~
su = i.ToString(); //스택 -> 힙 :Boxing
su = null; //가비지 컬렉터 엔진 활동
//구조체는 값형식, 클래스 참조형식
}
}
}
값 형식 변수 하나를 다른 변수에 대입하면 변수에 포함된 값이 복사됩니다. 이는 참조
형식 변수를 대입하는 경우와 다릅니다.
참조 형식 변수의 경우 개체 자체가 아니라 개체에 대한 참조가 복사됩니다.
모든 값 형식은 암시적으로 System.ValueType에서 파생됩니다.
참조 형식과 달리 값 형식에서 새 형식을 파생시킬 수 없습니다. 그러나 구조체는 참조 형식과 마찬가지로 인터페이스를 구현할 수 있습니다.
참조 형식과 달리 값 형식에는 null 값이 포함될 수 없습니다. 그러나 nullable 형식 기능을 사용하면 값 형식을 null에 대입할 수 있습니다.
참조 형식 변수는 데이터를 직접 포함하지 않고 데이터에 대한 참조를 포함합니다.
값으로 참조-형식 매개 변수를 전달할 경우 클래스 멤버 값과 같은 참조에서 가리키는
데이터를 변경할 수 있으나 참조 값 자체를 변경할 수는 없습니다. 즉, 같은 참조를 사용
하여 새 클래스에 메모리를 할당하고 이를 블록 밖에서 지속하도록 할 수 없습니다.
그렇게 하려면 ref 또는 out 키워드를 사용하여 매개 변수를 전달해야 합니다.
편의상 다음 예제에서는 ref를 사용 하도록 합니다.
boxing, unboxing, Value, Reference, 관련 참고)
http://msdn.microsoft.com/ko-kr/library/yz2be5wk.aspx
'.Net Project > .Net C#' 카테고리의 다른 글
86장 분할클래스 (0) | 2009.08.17 |
---|---|
85장 추가연산자 (0) | 2009.08.17 |
83장 값타입과 참조타입(ValueType,Reference) (0) | 2009.08.17 |
82장 널값표현(Nullable) (0) | 2009.08.17 |
81장 명령인수갯수 (0) | 2009.08.17 |