상세 컨텐츠

본문 제목

[C#] as와 is 연산자를 활용한 안전한 형 변환

C#

by 코딩하는 박줄기 2023. 9. 21. 22:41

본문

728x90
반응형

데이터 형식 간의 변환은 종종 필요합니다. 그러나 형 변환은 예외를 발생시킬 수 있으므로 조심스럽게 다뤄야 합니다. 이러한 상황에서 as 연산자와 is 연산자를 활용하여 안전하게 형 변환을 수행할 수 있습니다.

 

형 변환의 문제점

먼저, 왜 형 변환에 주의해야 하는지 알아보겠습니다. 예를 들어, 다음과 같이 object 타입의 변수를 string으로 형 변환하려고 시도한다고 가정해봅시다.

object myObject = "Hello, World!";
string myString = (string)myObject; // 이 부분에서 예외 발생 가능

만약 myObject가 실제로 string이 아닌 다른 데이터 형식을 가지고 있다면, 위 코드는 InvalidCastException 예외를 발생시킵니다.

 

as 연산자의 활용

이러한 문제를 피하기 위해 as 연산자를 사용할 수 있습니다. as 연산자는 형식 변환이 실패할 경우 null을 반환하므로 예외가 발생하지 않습니다. 아래는 as 연산자를 사용한 예제입니다.

object myObject = "Hello, World!";
string myString = myObject as string; // 안전한 형 변환

if (myString != null)
{
    // 형 변환이 성공한 경우
    Console.WriteLine(myString);
}
else
{
    // 형 변환이 실패한 경우
    Console.WriteLine("형 변환 실패");
}

 

 is 연산자의 활용

때로는 형 변환이 가능한지 미리 확인해야 할 때가 있습니다. 이때 is 연산자를 사용할 수 있습니다. is 연산자는 특정 형식으로의 형 변환이 가능한지 검사하며, 불리언 값을 반환합니다. 아래는 is 연산자를 사용한 예제입니다. 

object myObject = "Hello, World!";

if (myObject is string)
{
    // 형 변환이 가능한 경우
    string myString = (string)myObject;
    Console.WriteLine(myString);
}
else
{
    // 형 변환이 불가능한 경우
    Console.WriteLine("형 변환 실패");
}

 

아래는 is 연산자는 a를 int로 형 변환할 수 있는지 확인하고, 가능하다면 b라는 새로운 변수에 그 값을 할당합니다. 그런 다음 if 문의 조건식에서 이 형 변환 여부를 평가합니다.

object a = 42;

if (a is int b)
{
	Console.WriteLine($"a는 정수이며 b의 값은 {b}입니다.");
}
else
{
	Console.WriteLine("a는 정수로 형 변환할 수 없습니다.");
}

 

주의사항

as is 연산자를 사용할 때 주의할 점도 있습니다. as 연산자는 참조 형식에만 사용할 수 있으며, 값 형식에는 사용할 수 없습니다. 따라서 as 연산자를 사용하기 전에 형식이 참조 형식인지 확인해야 합니다. 또한, is 연산자로 형 변환 가능성을 확인한 후에 형 변환을 수행할 때 형식 변환이 실패할 수 있는지 고려해야 합니다.

int myInt = 42;

if (myInt is string) // 항상 false이므로 안전한 형 변환이 필요
{
    string myString = (string)myInt; // 컴파일 오류나 런타임 예외 발생 가능
}

 

결론

C#에서 안전한 형 변환을 위해 as 연산자와 is 연산자를 적절하게 활용하면 예외를 피하고 프로그램의 안정성을 향상시킬 수 있습니다. 그러나 형 변환을 사용할 때 항상 형식을 신중하게 검사하고, 필요에 따라 예외 처리 코드를 추가해야 합니다.

 

 

728x90
반응형

관련글 더보기

댓글 영역