Language/C#

C# :: 박싱과 언박싱

VallistA2015. 2. 16. 14:52

자료구조를 보면 힙과 스택이 있는데, 힙은 막쓰는 메모리고 스택은 지정한 크기만큼 사용하는 메모리 공간이라고 말한다. 

또한 스택은 int형과 같이 형(Type) 선언과 동시에 크기가 결정되는 데이터형이 들어간다. 

힙은 String과 같이 형(Type)만 선언되고 크기가 결정되지 않는 것 들이 들어간다. 


C#의 자료형에서 말하자면


int,byte,char,single,double,boolean,decimal 이런 놈들은 스택을 사용하는 Value Type이고,

String, Array, Object, Class, Interface, Delegate와 같은 녀석들은 힙을 사용하는 Reference Type이다.


실제 메모리 사용에 관해서 예를 들자면

int a = 0; 이라고 할때 

메모리 주소 : [0] 이라고 

메모리 주소에 값 0이 들어간다

string a = "1234"; 라고 하면

메모리 주소 : [참조하는 메모리 주소] - 참조된 메모리 주소 : [1234] 

위와 같이 할당되는 메모리 주소에 값은 없고 실제 값이 있는 메모리 주소가 들어가게 된다.


그래서 위는 Value 타입이고 밑은 Reference 타입이라고 한다.


이러한 자료구조가 있는데, 여기서 Value Type이 Reference Type으로 넘어가는 것도 있을 것 이며,

Reference Type이 Value Type으로 넘어가는 것들이 있을것인데, 이러한 작업을 박싱과 언 박싱이라고 한다.


그러한 일을 사용하는 예를 들자면, int 형을 string 형으로 바꾸는 ToString() 작업,

공통으로 사용 가능한 형에 쓰이는 

int b = 0;

object a =  b;

이러한 작업등 형변환 하는 개념의 작업이다.


느린 이유는 이렇게 하면 스택의 데이터가 힙으로 복사되는거고.. 그리고 스택에 있는 데이터 지우고..

힙에 있는 데이터가 스택의 데이터에 복사되어.. 힙에 데이터가 지워지는 번거로운 작업이 일어나게 되므로.. 많이 사용하면 안되는 것이라고 느낌이 오지 않는가..?

그래서 박싱과 언박싱을 많이 사용하지 말라는 것 이다.


MSDN 에서는 이렇게 써져 있는데..

boxing  unboxing 과정에는 많은 처리 작업이 필요합니다값 형식을 boxing할 때는 완전히 새로운 개체가 
만들어져야 하며이러한 작업에는 할당 작업보다 최대 20배의 시간이 걸립니다. unboxing을 할 때는 캐스팅 
과정에 할당 작업보다 4배의 시간이 걸릴 수 있습니다


얼마나 혐오스러운지 알 수 있을것이다. 그러므로 잘 쓰지 말자. 

(다만 사용할 때는 바로 팍팍 쓰도록하자. 쓰라고 만든 기능이니 말이다.)

'Language > C#' 카테고리의 다른 글

C# :: C#에서 System.IO를 이용한 갖가지 생성  (0) 2015.03.26
C# :: 박싱과 언박싱  (0) 2015.02.16

댓글

댓글쓰기 폼

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.

자고 싶습니다. ㅠㅠ

페이스북    :: 링크
카카오톡    :: kingbye1
Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today : 19

Total : 414,365

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘