본문 바로가기
C#/책 정리

C# 정리 ) as, is 연산자

2021. 11. 28.

이전 글에서 형변환 부분을 넘기지 않았다면 캐스팅 연산자를 통해 [명시적 형변환]을 하는 경우

컴파일 단계가 아닌, 프로그램을 실행할 때 오류가 발생한다는 것을 알았다.

닷넷 프로그램에서 오류가 발생하는것은 내부적으로 제법 부하가 큰 동작이다.

따라서 오류가 발생하지 않고 형변환의 필요성이 생겼고 이를 위해 

as 연산자가 추가되었다.

 

다음 코드는 오류가 발생하는 부분을 as 연산자로 수정을 한 코드이다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project1
{
    class desktop
    {
        bool power;
        public bool powerControl
        {
            get { return power; }
            set { power = value; }
        }
        public void what()
        {
            Console.WriteLine("데스크탑 입니다.");
        }
    }
    class netbook : desktop
    {
        bool isPortable = true;
        public bool isPort
        {
            get { return isPortable; }
        }
        public void whatNetbook()
        {
            Console.WriteLine("노트북 입니다.");
        }
    }
    class Class1
    {
        public static void Main(String[] args)
        {
            desktop pc = new desktop();
            netbook notebook = pc as netbook;
            if(notebook != null)
            {
                notebook.whatNetbook(); // 실행되지 않는다.
            }
        }
    }
}

as 연산자는 형변환이 가능하다면 지정된타입의 인스턴스 값을 반환한다.

그렇지 않다면 null을 반환하기 때문에 형변환에 성공했는지를 판단할 수 있다.

위의 코드에서 notebook 은 null 값을 가진다.

 

as 연산자는 [참조형 변수] 에만 적용할 수 있고, [참조형 타입] 으로의 체크나 가능하다.

잠깐 이 [참조형 변수] 에 대해서 설명을 하고 넘어가겠다.


변수는 크게 2가지로 나눌 수 있다.

[기본형 변수]

[참조형 변수]

 

기본형 변수는 실제 값(리터럴 이라고 한다) 을 저장하는 공간이다.

int, double 등등이 [기본형 변수] 에 포함된다.

 

[참조형 변수]는 실제 값이 아닌 [주소 값]을 저장한다.

[주소 값] 에 대한 내용은 C언어 [포인터] 부분에 잘 설명이 되어있으니 [주소 값] 이라는 단어가 이해가 안 된다면 가서 보고 오자.


다시 돌아가서 is 연산자도 있다.

is 는 형변환의 가능 여부를 bool 값으로 리턴한다.

 

as 와 is 는 언제, 어떤 것을 사용해야 하는가?

형변환된 [인스턴스] 가 필요하다면 as 를 사용하고

필요하지 않다면 is 를 사용하면 된다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project1
{
    class Class1
    {
        public static void Main(String[] args)
        {
            int n = 5;
            if(n is string)
            {
                Console.WriteLine("변수 n 은 string 타입으로 형변환이 가능합니다.");
            }

            string text = "text";
            if(text is int)
            {
                Console.WriteLine("변수 text는 int 타입으로 형변환이 가능합니다.");
            }
        }
    }
}

위의 코드를 실행하면 그 어떤 것도 출력되지 않는다.

 

C# 7.0 에서 부터 is 연산자는 as 연산자의 기능을 포함한다.

해당 내용의 자세한 내용은 다음에 설명한다.

'C# > 책 정리' 카테고리의 다른 글

C# 정리 ) GetType  (0) 2021.11.28
C# 정리 ) ToString  (0) 2021.11.28
C# 정리 ) System.Object  (0) 2021.11.28
C# 정리 ) 상속  (0) 2021.11.28
C# 정리 ) 프로퍼티  (0) 2021.11.28

댓글