오늘은 박싱과 언박싱에 대해서 알아보자.
박싱이란?
값타입을 참조타입으로 변환하는 것이다. 이게 무슨말이냐? 값 타입을 참조 타입으로 변환한다니....
그전에 박싱/언박싱에 대해서 설명하기 위해서 구조체와 클래스의 정의에 대한 내용이 다시 등장하는데 우선 복습하고 가보자.
클래스와 구조체의 다른점?!
클래스는 참조타입이고, 구조체는 값타입이란 점!
여기서 한가지 더 집고 넘어 가야 할 부분은 메모리. 앞에서 기본적으로 공부하고 넘어가야 할 부분.
메모리가 할당되고 안되고의 차이를 집고 넘어가야 할것이다.
값타입은 변수의 이름을 선언함과 동시에 메모리가 할당되는것이며, 참조타입은 변수의 이름을 선언하고 그것을 생성해줘야 메모리가 할당되는 것이다.
using
System;
class
BoxingTest1
{
public
static
void
Main()
{
int
p = 123;
object
o = p;
//Boxing이 일어나는 곳
Console.WriteLine(o);
}
}
여기서 보면, int p 는 값타입이다. 그리고 object o=p 가 되는순간 boxing 이 일어나는데, 간단하게 말해서 힙영역에서 o에 박스를 만들어서 그안에 p의 값을 복사 해온다~ 이런뜻이다.
object o 는 p의 값이 바뀌면 따라서 바뀌게 되는것이다.
이것이 boxing이다.
반대로 unboxing 이란, 참조타입을 값타입으로 바꿔주는것이다.
using
System;
class
BoxingTest1
{
public
static
void
Main()
{
int
p = 123;
object
o = p;
//Boxing이 일어나는 곳
int t= (int)o;
Console.WriteLine(o);
}
}
보면 int t에다가 o를 집어넣는데 여기서 주의할점은 캐스팅을 해주어야 한다는 것이다.
이렇게 되면 참조하는 것이 아니라, t라는 새로운 변수가 메모리에 할당된다.
'DEV_STUDY > C#' 카테고리의 다른 글
[C# 컬렉션] Colloection (0) | 2012.01.17 |
---|---|
[C# 객체지향] Delegate 대리자! (0) | 2012.01.10 |
[C# 객체지향] 업캐스팅( 제 1 다형성 ) 가상함수 ( 제 2 다형성 ) (0) | 2012.01.05 |
[C# 객체지향] 인터페이스 (Interface) 란?! (0) | 2012.01.04 |
[C# 객체지향] 추상 함수, 추상 클래스 - Abstract Mehtod, Abstract Class (0) | 2012.01.04 |