무효 클릭 IP 추적 중...
c#

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환

꼬예 2022. 5. 18.
[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환

이번 포스팅에서는 명시적 변환암시적 변환이 무엇인지, 그리고 형변환시 주의할점에 대해 알아보도록 하겠습니다.

 

 

1. 명시적 변환과 암시적 변환이란?

 

(1) 명시적 변환

명시적 변환은 이름에서도 느낄 수 있듯이 형변환을 하는걸 "명확"하게 표현 해주는 것을 의미합니다. 

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 1. 명시적 변환과 암시적 변환이란? - undefined - (1) 명시적 변환

위와 같이 int 타입을 long타입으로 변경하고 싶다면 (long)을 앞에 써줌으로써 "나 지금 타입 변환한다"라는걸 적어주는 것입니다. 

 

(2) 암시적 변환

암시적 변환이란 명시적 변환과는 반대로 "티나지 않게" 형 변환을 해주는 것을 의미합니다. 

마찬가지로 int 타입long 타입으로 예시 들어보겠습니다.

앞서 명시적 변환과는 다르게 (long)이라고 명확하게 명시 하지 않았음에도 불구하고 타입이 변경 됩니다. 

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 1. 명시적 변환과 암시적 변환이란? - undefined - (2) 암시적 변환

 

더 짧은 코드로 깔끔하게 형변환을 할 수 있기 때문에 "나는 암시적 변환만 써야지!" 라고 하면 문제가 생길 수 있습니다.  왜냐하면 암시적 변환은 특정한 조건에서만 사용 가능하거든요.

 

2. 언제 암시적 변환이 가능할까?

 

(1) 숫자형 타입

더 상위 차원의 타입으로 변환할때만 사용이 가능합니다. 

 

더 상위 차원이란게 무엇을 의미할까요?

 

가령 위에서 썼던 int타입long타입을 예로 들어볼게요.

int타입long타입 중 어느것이 더 상위 차원의 타입일까요?

 

숫자의 경우는 범위를 보면 명확하게 알 수 있습니다.

 

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입

숫자형 타입에는 MinValue, MaxValue를 통해 각각의 숫자형 타입이 가질 수있는 숫자 범위를 알 수 있는데요.

 

Output:

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입

출력을 해보면, long타입이 훨씬 넓은 범위를 가지고 있다는 걸 알 수있습니다. 

다시말하면 long타입int타입보다 더 상위 차원인것이죠.

 

앞서 정의 했던 내용을 다시 언급하겠습니다. 

int타입에서 더 상위 차원인 long타입으로 변환은 암시적 변화가 가능하기 때문에 아래와 같이 사용이 가능합니다. 

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입

 

반면 반대인 경우인 아래와 같은 경우는 에러가 발생합니다. 

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입
[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입

 

참고로 명시적 변환은 무조건 다 되기 때문에 신경쓰실 필요가 없습니다.

 

이해를 돕기 위해 숫자형이 아닌 다른 타입의 경우도 확인해보겠습니다.

 

(2) 그 외 타입

이번에는 object 타입과 string 타입을 예시로 들어볼게요.

object타입string 타입보다 상위 객체임으로 암시적으로 사용이 가능합니다 .

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (2) 그 외 타입

 

반면에 object(상위객체)string(하위객체)로 암시적 변경을하려고하면 아래와 같은 에러가 발생합니다. 

[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (2) 그 외 타입

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글

꼬예님의
글이 좋았다면 응원을 보내주세요!