-
C# 프로그래밍의 기초: 클래스 형식 변환(is,as)2024년 08월 24일
- 유니얼
-
작성자
-
2024.08.24.:52
728x90클래스 형식 변환은 객체 지향 프로그래밍에서 중요한 개념으로, 상속 관계에 있는 클래스 간에 객체의 타입을 변환하는 과정을 말합니다. C#에서 이러한 변환은 다형성을 활용하는 데 필수적이며, 코드의 유연성을 크게 증가시킵니다. 이 블로그 포스트에서는 업캐스팅과 다운캐스팅의 개념을 설명하고, 각각의 사용 사례를 통해 이해를 돕고자 합니다.
업캐스팅(Upcasting)
업캐스팅은 서브 클래스(자식 클래스)의 인스턴스를 슈퍼 클래스(부모 클래스) 타입으로 변환하는 과정입니다. 이 변환은 타입 계층에서 아래에서 위로 이동하는 것이며, 안전하고 자동으로 이루어지기 때문에 명시적인 형 변환 연산자를 사용할 필요가 없습니다.
업캐스팅의 장점:
- 슈퍼 클래스 타입으로 일반화하여 여러 서브 클래스 객체를 관리할 수 있습니다.
- 슈퍼 클래스에서 정의된 메서드와 속성에 접근하여, 코드의 재사용성을 높일 수 있습니다.
다운캐스팅(Downcasting)
다운캐스팅은 업캐스팅의 반대 과정으로, 슈퍼 클래스 타입의 객체를 서브 클래스 타입으로 변환합니다. 이 과정은 명시적으로 형 변환 연산자를 사용해야 하며, 변환하는 타입이 실제 객체의 타입과 호환되지 않는 경우 런타임 오류가 발생할 수 있습니다. 따라서, 다운캐스팅은 안전한 형 변환이 보장될 때만 사용해야 합니다.
다운캐스팅의 주의점:
- 타입 호환성을 체크하지 않고 다운캐스팅을 수행할 경우 InvalidCastException을 일으킬 수 있습니다.
- is나 as 연산자를 사용하여 안전하게 다운캐스팅을 수행할 수 있습니다.
is 연산자
is 연산자는 객체가 특정 타입과 호환되는지 확인하는 데 사용됩니다. 객체가 지정된 타입으로 변환이 가능한지 여부를 반환하며, 변환이 가능하면 true, 그렇지 않으면 false를 반환합니다. 이를 통해 다운캐스팅이 가능한지 사전에 확인하여 안전하게 형 변환을 수행할 수 있습니다.
as 연산자
as 연산자는 형 변환을 시도하되, 변환이 불가능할 경우 예외를 발생시키는 대신 null을 반환합니다. 이를 통해 형 변환에 실패할 때 예외 처리 없이 null 체크를 통해 안전한 처리를 할 수 있습니다. 단, as는 참조 타입에만 사용이 가능하며, 값 타입에는 사용할 수 없습니다.
전체예제 코드
using System; namespace CSharp_ProgramingStudy.Chapter5_OOP { class Animal { public void Eat() { Console.WriteLine("Animal is eating."); } } class Dog : Animal { public void Bark() { Console.WriteLine("Dog is barking."); } } public class Class9 { public void Run() { // 업캐스팅 예시 Dog dog = new Dog(); Animal animal = dog; // 업캐스팅, 자동으로 이루어짐 animal.Eat(); // 다운캐스팅 예시 Animal animal2 = new Dog(); Dog dog2 = (Dog)animal2; // 명시적 형 변환 필요 dog2.Bark(); // 다운캐스팅 예시 - is 연산자 사용 if (animal2 is Dog dog3) { dog3.Bark(); // 다운캐스팅 성공 시에만 호출 가능 } else { Console.WriteLine("animal2 is not a Dog."); } // 다운캐스팅 예시 - as 연산자 사용 Dog dog4 = animal2 as Dog; if (dog4 != null) { dog4.Bark(); // 다운캐스팅 성공 시에만 호출 가능 } else { Console.WriteLine("animal2 cannot be cast to Dog."); } // 다운캐스팅 예시 - 잘못된 형 변환 Animal animal3 = new Animal(); Dog dog5 = animal3 as Dog; if (dog5 != null) { dog5.Bark(); // 실행되지 않음 } else { Console.WriteLine("animal3 cannot be cast to Dog."); } } } }
결론
C#에서 클래스 형식 변환은 상속 구조 내에서 객체를 유연하게 사용할 수 있는 강력한 기능입니다. 업캐스팅을 통해 여러 서브 클래스의 객체를 부모 클래스 타입으로 다룰 수 있고, 다운캐스팅을 통해 특정 서브 클래스의 기능에 접근할 수 있습니다. is와 as 연산자를 사용하여 다운캐스팅을 안전하게 수행함으로써 코드의 안정성과 유연성을 더욱 높일 수 있습니다.
반응형다음글이전글이전 글이 없습니다.댓글