# 박싱 & 언박싱
2021. 1. 24. 12:45ㆍ개발/C#
컬렉션을 사용하면, 예를 들어 ArrayList인 list를 사용할 경우
여러가지 데이터 타입의 객체를 list에 담을 수 있고,
이때 list.Add(123)과 같이 사용할 경우, int형 변수가 object형 변수로 캐스팅되는데,
이 것을 박싱이라고 한다.
그리고 int a = (int)list[0] 이런 형태로 값을 가져올 때 언박싱이 일어난다.
object 형식은 값 형식의 데이터를 힙에 할당하기 위해 박싱 (boxing) 기능을 제공한다.
반대로 힙에 있던 값 형식 데이터를 값 형식 객체에
다시 할당해야 하는 경우가 있는데 이를 언박싱(unboxing)이라고 한다.
박싱 & 언박싱을 해야할 경우, 박싱할 때 일반적인 할당 작업보다 최대 20배의 시간이 소요될 정도로
성능이 좋지 않다
박싱 : 값 형식을 참조 형식으로 변환
언박싱 : 참조 형식을 값 현식으로 변환
박싱 (값 형식 -> Object) 의 과정 :
1. 값 타입을 힙에 생성하기 위해 메모리를 힙 영역에 생성
2. 값을 힙 영역에 할당된 메모리로 복사
3. 참조할 변수에 할당된 메모리 주소를 할당
언박싱 (Object -> 값 형식) 의 과정 :
1. 박싱 값인지 확인
2. 박싱된 값이라면 값 타입 변수에 복사
'개발 > C#' 카테고리의 다른 글
# Visual Studio에서 디버깅하기 (0) | 2021.01.24 |
---|---|
# Mysql DB에 데이터 쓰기 / 데이터 읽어오기 (0) | 2021.01.24 |
# 제네릭 클래스 (0) | 2021.01.24 |
# 컬렉션 / ArrayList & Stack (스택) & Queue (큐) (0) | 2021.01.24 |
식 본문 멤버 (식으로 이루어지는 멤버) (0) | 2021.01.24 |