반응형
C#에서 값 유형과 개체 유형은 근본적으로 다르며, 둘 중 하나를 다른 유형으로 대체할 수 없습니다. 값 유형은 해당 데이터를 직접 포함하는 유형이고, 객체 유형은 힙에 있는 해당 유형의 인스턴스를 가리키는 참조 유형입니다.
값 유형을 객체 유형으로 대체하거나 그 반대로 대체하려고 하면 두 유형이 호환되지 않음을 나타내는 컴파일 타임 오류가 발생합니다. 예를 들어 int 값을 객체 변수에 할당하려고 하면 int는 값 유형이고 객체는 참조 유형이므로 컴파일 타임 오류가 발생합니다.
값 유형을 객체로 사용하려면 값을 객체 참조로 래핑하여 값을 박스형으로 묶을 수 있습니다. 이렇게 하면 힙에 값의 복사본이 포함된 새 객체가 생성됩니다. 그런 다음 이 객체를 값 유형의 인스턴스인 것처럼 사용할 수 있습니다. 그러나 이 작업에는 힙에 새 객체를 만들고 값을 복사하는 작업이 포함되므로 성능 비용이 발생합니다.
반대로 객체를 값 유형으로 사용하려면 객체를 적절한 값 유형으로 형변환할 수 있습니다. 이 작업은 객체가 원래 적절한 값 유형으로 생성되었거나 이전에 박스형 객체였던 경우에만 가능합니다. 객체가 적절한 유형이 아닌 경우 형변환이 실패하고 런타임 예외가 발생합니다.
반응형
'공부 > C#' 카테고리의 다른 글
C#의 구조체(struct)는 가비지 컬렉터의 대상인가요? (0) | 2023.03.05 |
---|---|
가비지 컬렉션이란? (2) | 2023.03.05 |
박싱과 언박싱이란? (0) | 2023.03.04 |
C#에서의 클래스(Class)와 구조체(Struct)의 차이점 (0) | 2023.03.04 |
콜 바이 벨류(Call by Value)와 콜 바이 레퍼런스(Call by Reference)의 차이점 (2) | 2022.12.16 |