본문 바로가기
Computer & Program/C#

[C#]as와 is 연산자

by TDRemon 2016. 3. 29.
반응형

C#에서는 casting을 기타 다른 언어들처럼 변수 앞에 변환할 변수 또는 객체 타입을 괄호로 묶어 casting을 할 수 있지만 as 연산자도 제공한다. 그리고 이것이 해탕 객체인지 확인 할 수있는 is 연산자도 제공한다.

글보다 예제를 보자.


1
2
3
4
5
6
7
8
9
10
11
12
static void Main() {
    object[] temp = new object[2];
    temp[0= "test code";
    temp[1= 2016;
 
    string str1 = temp[0as string;
    string str2 = temp[1as string;
 
    int num1 = temp[1as int;    // 이거는 안된다.
    int num2 = (int)temp[1];
}
 
cs


위의 예제를 보면 object array를 만든 다음에 하나에는 string 값을, 나머지 하나에는 int 값을 넣었다.

line 6의 str1에는 어떤 값이 들어가 있을까? 여기에는 "test code"라는 string이 정상적으로 들어가 있을 것이다.

그럼 line 7은? temp[1]에 저장된 값은 2016이기 때문에 제대로 casting이 되지 않을 것이다. 그럴 경우 as 연산자는 null을 반환한다.


line 9를 보자. 주석으로 써놨지만 이건 구문오류이다. 왜냐하면 as 연산자는 참조 형식 또는 nullable 형식과 함께 사용해야 하기 때문이다. int에는 null을 넣을 수 없기 때문에 이 구문은 틀린 것이다. nullable을 허용하지 않는 변수들을 우리는 value type이라고 부른다. 그렇기 때문에 float, double 등 value type에는 as 연산자를 사용할 수 없다. 이러한 value type들은 line 10과 같이 casting을 해줘야 한다.


다음으로 is 연산자를 보자.


1
2
3
4
5
6
7
8
9
static void Main() {
    object[] temp = new object[2];
    temp[0= "test code";
    temp[1= 2016;
 
    bool result = temp[0is string;
    result  = temp[1is string;
}
 
cs


쓰이는 방법은 as 연산자와 유사하다. 단지 as 연산자는 casting이 주목적이라면 is 연산자는 casting이 가능한지 확인하기 위한 연산자이다. line 6을 보면 is 연산자의 return을 bool 형식으로 받고 있는데, 제대로 casting이 이루어질 수 있다면 true를 반환하기 때문이다. 그렇기때문에 line 6의 result에는 true가 저장될 것이다. line 7은 int형을 string으로 casting 가능한지 묻고 있다. 가능하지 않기 때문에 line 7의 result에는 null이 아닌 false가 저장된다.


정리하면 아래와 같다.


as 연산자

 - casting을 위한 연산자.

 - casting에 실패하면 null을 반환.

 - 참조 형식 또는 nullable 형식에서만 사용 가능.


is 연산자

 - casting 확인 연산자.

 - Java의 instanceof 연산자와 매우 유사.

 - casting이 가능하면 true를 반환하고 불가능하다면 false 반환.


반응형

'Computer & Program > C#' 카테고리의 다른 글

[C#]out과 ref 키워드 차이  (0) 2016.01.27

댓글