Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 'as' 연산자란? 목적과 사용 방법 완벽 정리

C# 'as' 연산자의 개념

C#에서 'as' 연산자는 호환 가능한(compatible) 타입 간의 변환을 수행하는 연산자입니다. 일반적인 캐스트(cast) 연산과 비슷하게 동작하지만, 몇 가지 중요한 차이점이 있습니다.

'as' 연산자는 아래 세 가지 변환만 수행할 수 있습니다.

  • 참조 변환(Reference Conversion): 클래스나 인터페이스 간의 상속 계층 구조 기반 변환
  • Nullable 변환(Nullable Conversion): 값 타입을 nullable 타입으로 변환
  • 박싱 변환(Boxing Conversion): 값 타입을 object 타입으로 변환

반면 사용자 정의 변환(User-defined Conversion) 같은 다른 종류의 변환은 'as' 연산자로 처리할 수 없습니다. 이런 경우에는 반드시 일반 캐스트 식을 사용해야 합니다.

'as' 연산자의 핵심 장점

'as' 연산자의 가장 큰 특징은 형 변환이 실패할 경우 예외(Exception)를 던지지 않고 null을 반환한다는 점입니다. 일반 캐스트가 실패하면 InvalidCastException이 발생하지만, 'as'를 사용하면 결과가 null인지만 검사하면 되므로 코드가 더 안전하고 간결해집니다.

기본 문법

string s = obj[i] as string;

위 코드처럼 'as' 뒤에 변환하고자 하는 타입을 지정하면 됩니다. 변환에 성공하면 해당 타입의 객체가 반환되고, 실패하면 null이 반환됩니다.

예제 코드

아래 예제는 object 배열에 담긴 값들을 'as' 연산자로 string 타입으로 변환해 보는 코드입니다.

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();
   }
}

코드 설명

  1. object 타입 배열을 생성하고 첫 번째 요소에는 문자열 "jack", 두 번째 요소에는 정수 32를 저장합니다.
  2. for 반복문에서 각 요소를 as string으로 변환을 시도합니다.
  3. obj[0]은 문자열이므로 변환에 성공하여 "jack"이 출력됩니다.
  4. obj[1]은 정수 32이므로 string으로 변환할 수 없어 null이 반환되고, "This is not a string!"이라는 메시지가 출력됩니다.

실행 결과

0: 'jack'
1: This is not a string!

마무리

'as' 연산자는 타입 변환 실패 시 예외 대신 null을 반환하기 때문에, 객체의 실제 타입을 확신할 수 없는 상황에서 안전하게 형 변환을 처리할 수 있는 유용한 도구입니다. 단, 참조 변환·nullable 변환·박싱 변환에만 사용할 수 있다는 점과, 값 타입(non-nullable)으로 직접 변환할 수 없다는 점은 꼭 기억해 두세요.