C#, ASP.NET, CORE, MVC
[C#] 박싱 & 언박싱
즐기는플머
2018. 7. 18. 19:22
박싱: 값 타입 -> 참조 타입
c#에선 데이터형의 최상위 부모를 object형으로두는데
다른형의 변수를 object형으로 변환하여 힙메모리에 저장시키는것.
ex) int m=123; object obj = m; 묵시적
Object 라는 참조 타입에 123이라는 값 타입의 리터럴 상수를 대입하는 간단한 코드이다.
언박싱:참조 타입 -> 값 타입
힙에 저장된 데이터의 형식을 다시 원래 데이터형으로 변환하는것.
ex) int n= (int)obj; 명시적
비용문제:결국 메모리 위치를 변화 시켜 가는 박싱과 언박싱은 비용이 많이 든다.
대표적으로 ArrayList 와 같은 object 형 컬렉션에 대량의 값 타입을 넣고 빼고 하여
발생하는 박싱,언박싱은 실제로 많은 속도 저하를 유발하는 원인이기도 하다.
(실제로 닷넷 2.0에서는 박싱,언박싱 (업캐스팅,다운캐스팅)의 비용을 줄이기 위해 지네릭이라는
새로운 개념이 도입되었다)