반응형
C#에서 박싱과 언박싱은 각각 값 유형을 참조 유형으로 변환하고 참조 유형에서 변환하는 데 사용되는 연산입니다. 다음은 각각에 대한 간략한 설명입니다:
박싱:
박싱은 값 유형을 개체 또는 System.ValueType과 같은 참조 유형으로 변환하는 프로세스입니다. 값 유형이 박싱되면 힙에 새 객체가 생성되어 값 유형의 값을 저장합니다. 새 객체에는 값 유형에 대한 참조가 할당되고 이 참조는 박싱 작업의 결과로 반환됩니다. 원래 값 유형은 변경되지 않습니다.
int i = 42;
object o = i; // boxing operation
예를 들어, 위 예제에서 정수 변수 i의 값은 object 유형의 새 개체에 포함됩니다. 변수 o는 이제 이 개체에 대한 참조를 보유합니다.
언박싱:
언박싱은 값 유형이 포함된 참조 유형을 다시 값 유형으로 변환하는 프로세스입니다. 참조 유형이 언박싱되면 객체에서 값 유형이 추출되어 값 유형 변수에 할당됩니다. 원래 참조 유형은 변경되지 않습니다.
object o = 42;
int i = (int) o; // unboxing operation
이 예에서 정수 변수 i의 값은 객체 유형인 객체 o에서 추출됩니다. (int) 구문을 사용하여 참조 유형 o를 값 유형 int로 캐스팅합니다. 이제 변수 i는 42의 값을 가집니다.
박싱 및 언박싱은 힙에 새 객체를 생성하고 스택과 힙 간에 데이터를 앞뒤로 복사해야 하므로 성능 측면에서 비용이 많이 드는 작업이 될 수 있습니다. 일반적으로 박싱 및 언박싱은 가능한 한 피하고 대신 값 유형으로 직접 작업하는 일반 클래스 및 메서드를 사용하는 것이 가장 좋습니다.
반응형
'공부 > C#' 카테고리의 다른 글
C#의 구조체(struct)는 가비지 컬렉터의 대상인가요? (0) | 2023.03.05 |
---|---|
가비지 컬렉션이란? (2) | 2023.03.05 |
오브젝트 타입에 벨류 타입을 대입하게 될 경우 어떤 현상이 발생할까? (0) | 2023.03.05 |
C#에서의 클래스(Class)와 구조체(Struct)의 차이점 (0) | 2023.03.04 |
콜 바이 벨류(Call by Value)와 콜 바이 레퍼런스(Call by Reference)의 차이점 (2) | 2022.12.16 |