• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • 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 연산자를 사용하여 다운캐스팅을 안전하게 수행함으로써 코드의 안정성과 유연성을 더욱 높일 수 있습니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바