2010.07.04 04:40 책 정리/Effective C#

포스트를 만든 목적

  • 이렇게 해야, 내가 책을 건성으로 보지 않는다.

개요

  • boxing, unboxing 이 언제 발생 되고, 어떻게 처리 되는지 알아야 한다.

내용

관련 링크

boxing 과 unboxing이란 무엇인가?

C#에선 value 타입과 reference 타입이 존재한다. 이러한 두 타입간의 존재 때문에, reference 타입만을 요구하는 특정한 상황에선, 어쩔 수 없이, 변환 하는 과정이 필요하다. value 타입이 reference 타입으로 변환할 때, 레퍼런스 객체에 포장한다 하여, boxing  이라고 하고, 이 포장된 것을 사용 하려 할 때, 포장했던 박스를 푼다고 해서, unboxing 이라고 한다.

왜 bxoing과 unboxing을 최소화 해야 하는가?

value 타입을 boxing 하면, reference 타입으로 바뀐다. 이 때, 임의의 reference 타입 속에 value 타입이 복사가 된다. 즉, 힙에 올라간다는 뜻이다. 반대로 unboxing 을 하게 되면, box 안에 있는 value를 임의의 value에 복사하게 된다.

boxing은 간단한 참조 할당보다 최대 20배의 시간이 걸리며, unboxing은 캐스팅 과정에서 할당과정보다 4배의 시간이 소모가 된다. 그래서 최소화 하라는 것이다. boxing은 묵시적으로 이루어지기 때문에, 주의해야 한다.

관련 코드를 줄 수 있는가?


boxing 과 unboxing을 최소화 하는 요령

  • value 타입이 reference 처럼 많이 쓰인다면, 차리리 reference 타입으로 바꾸어 버린다.
  • 함수의 인자가 object 타입인 경우, boxing 해도 무리 없는지 생각해 본다.

결론

  • 성능에 치명적인 영향을 준다면, boxing과 unboixng 을 최소화 해라.

여담

  • 졸렵다.


저작자 표시
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요