반응형

면접이든 아니든 항상 단골 질문 중 하나인 Boxing, UnBoxing, UpCasting, DownCasting.
오늘은 4가지에 대해 아주 가볍고 가볍고 너~무 가볍게 설명하고자 해요!
사실 어려운 개념은 아니라서 한번만 짚고 넘어가면 괜찮으실거에요!
자 그럼 가볍게 가볼까요?

Upcasting·Downcasting
상향 형변환이라고 하며 여기서 Casting은 해당 타입을 변환이라고 아시면 되요.
그렇다면 Downcasting은 하향 형변환으로 상향 형변환과 반대겠죠?
아래 소스로 예를 들어보자면
// 인터페이스 부모, 클래스 자식
interface 부모
{
void Execute();
}
class 자식 : 부모
{
protected void Execute()
{
// Do...
}
}
위와 같이 정의되어 있다고 했을 때
부모 -> 자식 형변환 시 하향 형변환
자식 -> 부모 형변환 시 하향 형변환
// Upcasting
부모 Parent = new 자식();
// Downcasting
자식 Child = new 부모();
Boxing ·UnBoxing
가볍게 보면 Object Type은 타입의 최상단 루트이며
Stack 영역의 메모리의 값을 Heap 영역 메모리로 할당해주는것을 Boxing
Heap 영역의 메모리의 값을 Stack 영역 메모리로 할당해주는것을 UnBoxing이라고 합니다.
이것도 예로 들어볼까요?
// Boxing
object obj = (object)123;
// UnBoxing
int num = (int)obj;
여기서 좀 더 나아가면
C#에서
Value Type은 Struct로 정의되고
Reference Type은 class로 정의됩니다.
그래서 int는 struct 구조체로서 상속받을 수 없습니다.
그렇지만 오류없이 사용이 가능한 이유는 모든 값 형식은 Value Type을 상속받을 수 있습니다.
Value Type > 모든 값 형식
즉, 이 말은 System.Object는 System.ValueType을 상속받고 있기 때문에 가능한 것입니다!
반응형
'- 개발 > C# 개발정리' 카테고리의 다른 글
[C#] Parallel 사용 방법 /예제/정의/추가적인작업 (0) | 2023.12.26 |
---|---|
[C# Async/await/Invoke/beginInvoke/크로스스레딩] 비동기 처리 방법 /예제소스 (1) | 2023.12.26 |