값형식

 - 형식의 값이 저장됨

 - 새 값을 할당하면 개체 자체의 값이 복사됨

 - System.ValueType에서 파생됨

 - 구조체(숫자형식, bool, 사용자정의), 열거형 등의 형식 제공


참조형식

- 데이터에 대한 참조가 저장됨

- 새 값을 할당하면 개체의 참조가 복사됨

- class, interface, delegate, dynamic, object, string 등의 형식 제공


Boxing

 - 값 형식을 object(혹은 object에서 파생된) 형식으로 변환하는 프로세스

 - 암시적

 - System.Object 내부에서 관리되는 힙에 할당되고 값이 복사됨


UnBoxing

 - object(혹은 object에서 파생된) 형식에서 값 형식으로 변환하는 프로세스

 - 명시적

 - 인스턴스가 지정한 값 형식을 boxing한 값인지 확인 후 인스턴스의 값을 변수에 할당


예시코드


int valueType = 1;

object refType = valueType;

int valueType2 = (int)refType;








주의사항

 * 비용 : 최대한 피하기

  - boxing은 단순 참조보다 20배정도의 소요시간이 걸리고 unboxing의 캐스팅프로세스는 할당의 4배정도의 시간이 걸림

  - ArrayList는 boxing, unboxing을 유발하므로 가능하면 List<T>를 사용하자

  - 힙에 할당이 되었다는 것은 GC가 호출될 가능성이 있다는 것을 유의해야 함

 

* 예외 : try catch 사용, if로 조건 체크 등

  - null을 unboxing 할 수 없음 => NullReferenceException

  - 호환되지 않는 값 형식에 대한 참조를 unboxing 할 수 없음 => InvalidCastException


Posted by @히테
,