공부/C#

오브젝트 타입에 벨류 타입을 대입하게 될 경우 어떤 현상이 발생할까?

셩잇님 2023. 3. 5. 21:43
반응형

 

 

C#에서 값 유형과 개체 유형은 근본적으로 다르며, 둘 중 하나를 다른 유형으로 대체할 수 없습니다. 값 유형은 해당 데이터를 직접 포함하는 유형이고, 객체 유형은 힙에 있는 해당 유형의 인스턴스를 가리키는 참조 유형입니다.

값 유형을 객체 유형으로 대체하거나 그 반대로 대체하려고 하면 두 유형이 호환되지 않음을 나타내는 컴파일 타임 오류가 발생합니다. 예를 들어 int 값을 객체 변수에 할당하려고 하면 int는 값 유형이고 객체는 참조 유형이므로 컴파일 타임 오류가 발생합니다.

값 유형을 객체로 사용하려면 값을 객체 참조로 래핑하여 값을 박스형으로 묶을 수 있습니다. 이렇게 하면 힙에 값의 복사본이 포함된 새 객체가 생성됩니다. 그런 다음 이 객체를 값 유형의 인스턴스인 것처럼 사용할 수 있습니다. 그러나 이 작업에는 힙에 새 객체를 만들고 값을 복사하는 작업이 포함되므로 성능 비용이 발생합니다.

반대로 객체를 값 유형으로 사용하려면 객체를 적절한 값 유형으로 형변환할 수 있습니다. 이 작업은 객체가 원래 적절한 값 유형으로 생성되었거나 이전에 박스형 객체였던 경우에만 가능합니다. 객체가 적절한 유형이 아닌 경우 형변환이 실패하고 런타임 예외가 발생합니다.

 

 

반응형