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

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

꼬예 2022. 5. 18.

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

 

 

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

 

(1) 명시적 변환

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

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

 

(2) 암시적 변환

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

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

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

 

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

 

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

 

(1) 숫자형 타입

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

 

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

 

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

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

 

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

 

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

 

Output:

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

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

 

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

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

 

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

 

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

 

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

 

(2) 그 외 타입

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

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

 

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

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

댓글