C# 'as' 연산자란?
C#의 'as' 연산자는 서로 호환되는 형식(compatible types) 간의 변환을 수행하는 연산자입니다. 일반적인 캐스트(cast) 연산과 비슷하게 동작하지만, 참조 변환(reference conversion), nullable 변환, 박싱(boxing) 변환 세 가지만 지원한다는 점이 특징입니다.
따라서 사용자 정의 변환(user-defined conversion)과 같은 그 외의 변환은 'as' 연산자로 처리할 수 없으며, 이런 경우에는 반드시 캐스트 식(cast expression)을 사용해야 합니다.
'as' 연산자의 핵심 특징
- 형식 변환이 성공하면 변환된 값을 반환합니다.
- 변환이 불가능한 경우 예외를 발생시키지 않고 null을 반환합니다.
- 값 형식(value type)에는 직접 사용할 수 없으며, nullable 형식을 통해서만 적용 가능합니다.
'as' 연산자 기본 문법
다음은 C#에서 'as' 연산자를 사용해 형식을 변환하는 기본적인 예입니다.
string s = obj[i] as string;
위 코드에서 obj[i]가 string 형식이라면 해당 문자열이 변수 s에 할당되고, 그렇지 않으면 s에는 null이 저장됩니다.
예제 코드
아래 전체 코드를 실행하면 'as' 연산자가 실제로 어떻게 동작하는지 확인할 수 있습니다.
using System;
public class Demo {
public static void Main() {
object[] obj = new object[2];
obj[0] = "jack";
obj[1] = 32;
for (int i = 0; i < obj.Length; ++i) {
string s = obj[i] as string;
Console.Write("{0}: ", i);
if (s != null)
Console.WriteLine("'" + s + "'");
else
Console.WriteLine("This is not a string!");
}
Console.ReadKey();
}
}실행 결과
0: 'jack' 1: This is not a string!
코드 설명
배열 obj의 첫 번째 요소는 문자열 "jack"이므로 'as' 연산자가 성공적으로 string으로 변환하여 출력됩니다. 반면 두 번째 요소는 정수 32이므로 string으로 변환할 수 없어 null이 반환되고, "This is not a string!" 메시지가 출력됩니다.
이처럼 'as' 연산자는 잘못된 형식 변환 시 InvalidCastException 예외를 던지지 않고 null을 반환하기 때문에, 변환 가능 여부를 안전하게 검사해야 하는 상황에서 매우 유용하게 활용됩니다.