인터페이스를 제외한 데이터 형식은 (특별한 타입이 정해져 있지 않은 참조 타입인) Object 타입으로부터 모두 파생된다.

즉, 값 타입인 int 형도 더 큰 범주에 속해 있는 Object의 자식 객체라는 이야기가 된다.

서로 다른 타입인 값 타입과 참조 타입은 Object 타입을 매개로 하여 박싱과 언박싱을 통해 서로에게 전달될 수 있다.


박싱 : 값 타입 -> 참조 타입

박스 내에 값 타입이 포함된다. 값 타입을 참조 타입으로 변경하기 위해 타입이 정해져 있지 않은(system.Objet) 익명의 참조 타입이 생성

값 타입은 이 익명의 참조 타입 내부에 저장


언박싱 : 값 타입 -> 참조 타입

박싱되어 있는 참조 타입의 객체로부터 값 타입 객체의 복사본을 가져온다.

"박싱과 언박싱은 System.Object 타입이나 인터페이스 타입이 필요한 곳에서 값 타입을 사용하기 위해 반드시 필요한 매커니즘이다.

하지만 박싱과 언박싱은 성능에 좋지 않은 영향을 미친다. 때로는 박싱과 언박싱을 수행하는 과정에서 임시 객체가 생성되기도 하는데

간혹 이로 인해 예상치 못한 버그가 발생하기도 한다. 따라서 박싱과 언박싱은 가능한 피하는 것이 좋다." 라고 -Effective C# 에서 설명함.

'Programming > C++, C#' 카테고리의 다른 글

[C#] Out vs Ref  (0) 2018.06.06
[C#] Const vs Readonly  (0) 2018.06.06
[C#] 암시적 변환 vs 명시적 변환  (0) 2018.06.05
[C#] 값 타입 vs 참조 타입  (0) 2018.06.05
클래스(정적멤버)  (0) 2018.06.05

+ Recent posts