프로그래밍/C#

[C#] 박싱,언박싱 / 업캐스팅, 다운캐스팅

gameObject 2023. 6. 20. 01:11
728x90

1. 박싱 / 언박싱

1) 박싱

- 변수에 값을 대입할 때 일어나는 기능으로 상위 변수에 하위 변수를 대입하는 것을 의미한다.

- 마치 상자에 어떤 물건을 넣는것이라고 생각하면 된다.

- 하위 변수(물건)을 담을 상위 변수(상자)에 넣는것

- 보통 상위 변수는 object를 말한다.

int number = 10;
char charValue = 'A';
string textStr = "Hello world!";

//이것이 박싱이다.
object canSaveAll1 = number;
object canSaveAll2 = charValue;
object canSaveAll3 = textStr;

 

2) 언박싱

- 상위 변수에 대입했던 하위변수를 본래의 자료형으로 되돌리며 꺼내는 것을 의미한다.

- 상위 변수에 있던 하위 변수를 본래의 자료형으로 되돌리기 위해서 타입 캐스팅을 할 때, 언박싱이 일어난다고 표현한다.

int number3 = (int)canSaveAll1;

- 이런식으로 타입캐스팅을 해준다면 넣을 수 있다. 이것이 언박싱이다.

 

3) 기타

- 박싱, 언박싱은 변수와 관련되어 사용되는 용어이다.

- 언박싱의 형태가 이루어질 경우 부하가 많이 걸리게 되므로 하지 않는것이 좋다.

- 초보 프로그래머에게 중요한 개념이다.

 

1. 업캐스팅 / 다운캐스팅

1) 업캐스팅

- 자식클래스를 부모클래스로 타입 캐스팅 하는 것을 의미한다.

- 자세히 얘기하면 자식클래스의 인스턴스를 부모클래스의 타입으로 변환하는 것이다.

- 자식클래스의 특정한 멤버나 동작에는 접근할 수 없게됩니다.

class Animal {
    public void Eat() {
        Console.WriteLine("Animal is eating.");
    }
}

class Cat : Animal {
    public void Meow() {
        Console.WriteLine("Cat says meow.");
    }
}

class MainClass {
    public static void Main(string[] args) {
        Animal animal = new Cat();  // 업캐스팅
        animal.Eat();  // Animal is eating.
        // animal.Meow();  // 컴파일 에러: Animal에는 Meow() 메서드가 없음
    }
}

 

2) 다운캐스팅

- 부모클래스를 자식클래스로 타입 캐스팅 하는것을 의미한다.

- 업캐스팅된 부모 클래스의 인스턴스를 다시 자식 클래스의 타입으로 변환하는것.

- 다운캐스팅을 할때는 앞서 업캐스팅된 객체가 실제로 해당 자식 클래스의 인스턴스인지 확인이 필요하다.

- 그렇지 않을 경우 InvalidCastException이 발생할 수 있다.

class Animal {
    public void Eat() {
        Console.WriteLine("Animal is eating.");
    }
}

class Cat : Animal {
    public void Meow() {
        Console.WriteLine("Cat says meow.");
    }
}

class MainClass {
    public static void Main(string[] args) {
        Animal animal = new Cat();  // 업캐스팅
        if (animal is Cat) {
            Cat cat = (Cat)animal;  // 다운캐스팅
            cat.Meow();  // Cat says meow.
        }
    }
}
728x90