본문 바로가기
개발/C#

C# - (string) vs ToString vs as string

by E-nan 2020. 9. 5.
728x90
반응형

 

안녕하세요. 2nan 입니다.

 

 

저는 문자열로 변환할때 주로 ToString 을 사용하곤 했습니다. 제가 개인적인 생각으로는 문자열로 변환할때 보통의 상황에서는 ToString 을 사용한다고 알고 있기 때문이였는데요, 어느날 구글링을 하던 도중 문자열로 변환하는 코드가 (string) 이 앞에 붙은 코드도 있었고, ToString 대신에 as string 이 있는 코드도 볼 수 있었습니다.

 

물론 사람마다 코딩 스타일이 전부 다르기 때문에 방식이 전부 다르겠지만, 어떤때는 as string 을 사용해야만 하는 경우도 있어서 어떤 경우에 맞게 사용해야 하는지 포스팅 할 겸, 글을 올리게 되었습니다. (저도 자주 까먹어서 겸사겸사..)

 

먼저 예시 코드를 보겠습니다.

 

 

 

1. (string)

예시 코드처럼 object 앞에 (string) 을 붙이는 행위를 '강제 형 변환' 이라고 합니다. 강제 형 변환이란 어떤 변수를 강제로 형을 변환하는 것 입니다. (sting)object 라고 코드를 작성하면 object 변수를 string 형으로 바꿔라 라고 하는것이죠.

만약 강제 형 변환을 사용한다면 예기치 못한 오류가 발생할 수도 있습니다. object 변수가 만약 string 값을 가지고 있는게 아닌, int 형을 가지고 있는 경우 string 형으로 강제 형 변환을 하면 프로그램이 동작하다가 Exception 즉, 오류가 발생할 것 입니다. 또한, 코드상으로는 오류 즉, 빨간 밑줄이 생성되지 않으므로 디버깅이나, 직접 실행을 하지 않는 이상 개발자는 오류라고 생각하지 않을 것 입니다. 그렇기 때문에 저는 강제 형 변환을 잘 사용하지 않습니다.

 

is 연산자를 사용해서 다음과 같이 올바르게 동작하게 하는 경우도 존재합니다.

object num = 10;

// num 은 int 값을 가지고 있으므로 동작하지 않음.
if(num is string)
{
	// if문의 조건이 false이기 때문에 동작하지 않으므로 오류 발생 X
	string str = (string)num;
}

 

2. ToString

본문에서도 말씀드렸지만, 제가 가장 많이 사용하는 형 변환 방식입니다. 변수.ToString() 의 형태로 사용하며, 보통의 상황에서는 ToString을 많이 이용합니다. 하지만 이녀석도 완벽한 것은 아닙니다. 만약 변수가 null 값을 가지고 있다면 Exception 이 발생합니다.

object objA = "Hello";

string strA = objA.ToString();	// "Hello"
string strB = objA.ToString();	// 만약 objA가 null 이라면 Exception 발생

 

3. as string

as string 은 변수가 string 이 아니거나, null 값이 들어있으면 별도의 Exception 없이 null 을 반환합니다. 그렇기 때문에 개발자가 의도한 값이 아니더라도 변환하는 부분에서는 오류가 발생하지 않습니다.

object objA = "Hello";
object objB = 10;

string strA = objA as string;	// "Hello"
string strB = objB as string;	// null

 

 

저는 보통의 경우에는 ToString 을 사용하지만, 경우에 따라서는 as string 을 사용하기도 합니다.

제가 as string 을 사용하는 경우의 대부분은 null 병합 연산자와 같이 사용해서 다음과 같은 상황에 사용합니다.

1. string 값을 받아와야 할 경우

2. 만약 null 값이라면 공백으로 대체 해야 할 경우

object obj = ??;	// objA 값이 string 값인지, null 인지 모르는 경우

string str = obj as string ?? string.Empty;
// 1. obj 가 string 이라면 string 값을 반환
// 2. obj 가 string 아니라면 null 반환
// 3. obj as string 이 null 이라면 string.Empty 를 반환
// 4. obj as string 이 null 아니라면 obj as string 을 반환

 

 

결론적으로 (string) 강제 형 변환을 사용하려면 선행 조건 처리를 잘 해주어야 하고, 보통의 상황에서는 ToString, 그리고 null 값이 들어오는 경우에는 as string 을 사용한다는 점을 알아두면 좋을것 같습니다.

 

 

공감이나 도움이 되셨다면, 공감버튼을 눌러주세요ㅎㅎ

질문이나 오타, 잘못된 내용 등은 댓글로 남겨주시면 감사하겠습니다 :)

 

 

728x90
반응형

댓글