이번 포스팅에서는 명시적 변환과 암시적 변환이 무엇인지, 그리고 형변환시 주의할점에 대해 알아보도록 하겠습니다.
1. 명시적 변환과 암시적 변환이란?
(1) 명시적 변환
명시적 변환은 이름에서도 느낄 수 있듯이 형변환을 하는걸 "명확"하게 표현 해주는 것을 의미합니다.
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 1. 명시적 변환과 암시적 변환이란? - undefined - (1) 명시적 변환 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 1. 명시적 변환과 암시적 변환이란? - undefined - (1) 명시적 변환](https://blog.kakaocdn.net/dn/cO4py7/btrCrhj8VTc/HWqZxXjnPyeUjy81lyNU70/img.png)
위와 같이 int 타입을 long타입으로 변경하고 싶다면 (long)을 앞에 써줌으로써 "나 지금 타입 변환한다"라는걸 적어주는 것입니다.
(2) 암시적 변환
암시적 변환이란 명시적 변환과는 반대로 "티나지 않게" 형 변환을 해주는 것을 의미합니다.
마찬가지로 int 타입을 long 타입으로 예시 들어보겠습니다.
앞서 명시적 변환과는 다르게 (long)이라고 명확하게 명시 하지 않았음에도 불구하고 타입이 변경 됩니다.
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 1. 명시적 변환과 암시적 변환이란? - undefined - (2) 암시적 변환 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 1. 명시적 변환과 암시적 변환이란? - undefined - (2) 암시적 변환](https://blog.kakaocdn.net/dn/d6SC8S/btrCqoxkQ5G/C9nec3wlPDN0dkEIEq7syk/img.png)
더 짧은 코드로 깔끔하게 형변환을 할 수 있기 때문에 "나는 암시적 변환만 써야지!" 라고 하면 문제가 생길 수 있습니다. 왜냐하면 암시적 변환은 특정한 조건에서만 사용 가능하거든요.
2. 언제 암시적 변환이 가능할까?
(1) 숫자형 타입
더 상위 차원의 타입으로 변환할때만 사용이 가능합니다.
더 상위 차원이란게 무엇을 의미할까요?
가령 위에서 썼던 int타입과 long타입을 예로 들어볼게요.
int타입과 long타입 중 어느것이 더 상위 차원의 타입일까요?
숫자의 경우는 범위를 보면 명확하게 알 수 있습니다.
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입](https://blog.kakaocdn.net/dn/IrOEB/btrCrgr120w/P3pS328xW1SQti9XOSZVm1/img.png)
숫자형 타입에는 MinValue, MaxValue를 통해 각각의 숫자형 타입이 가질 수있는 숫자 범위를 알 수 있는데요.
Output:
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입](https://blog.kakaocdn.net/dn/l3KuI/btrCqnLYAMa/HZ2kbO2rif8BoxustCiHIK/img.png)
출력을 해보면, long타입이 훨씬 넓은 범위를 가지고 있다는 걸 알 수있습니다.
다시말하면 long타입이 int타입보다 더 상위 차원인것이죠.
앞서 정의 했던 내용을 다시 언급하겠습니다.
int타입에서 더 상위 차원인 long타입으로 변환은 암시적 변화가 가능하기 때문에 아래와 같이 사용이 가능합니다.
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입](https://blog.kakaocdn.net/dn/btL6d7/btrCrO258cn/eAPizrAUOrXUEiNRIexYe0/img.png)
반면 반대인 경우인 아래와 같은 경우는 에러가 발생합니다.
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입](https://blog.kakaocdn.net/dn/6CUPD/btrCul6VUyd/sccl9kKiGuKKZnFBuk1g20/img.png)
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (1) 숫자형 타입](https://blog.kakaocdn.net/dn/ezz33e/btrCrPnocfi/724kPe7K3Zns4rrrV4wERK/img.png)
참고로 명시적 변환은 무조건 다 되기 때문에 신경쓰실 필요가 없습니다.
이해를 돕기 위해 숫자형이 아닌 다른 타입의 경우도 확인해보겠습니다.
(2) 그 외 타입
이번에는 object 타입과 string 타입을 예시로 들어볼게요.
object타입이 string 타입보다 상위 객체임으로 암시적으로 사용이 가능합니다 .
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (2) 그 외 타입 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (2) 그 외 타입](https://blog.kakaocdn.net/dn/bbEc9f/btrCqar2GPk/svFQ1eWg7Kb0g1DMiDKXnK/img.png)
반면에 object(상위객체)을 string(하위객체)로 암시적 변경을하려고하면 아래와 같은 에러가 발생합니다.
![[c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (2) 그 외 타입 [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 - 2. 언제 암시적 변환이 가능할까? - undefined - (2) 그 외 타입](https://blog.kakaocdn.net/dn/nXvLI/btrClea65FE/QkpGErKlPAaU2wIk6ZZeDK/img.png)
'c#' 카테고리의 다른 글
[c#] visual studio 괄호 색깔이 검정으로 바뀌는 에러? (0) | 2022.05.19 |
---|---|
[c#] 박싱(boxing), 언박싱(unboxing) 개념과 사용 이유 (1) | 2022.05.18 |
[c#] 값 형식 처럼 작동하는 string(참조 형식) (0) | 2022.05.17 |
[c#] 값 형식(value types) VS 참조 형식(reference types) (1) | 2022.05.17 |
[c#] Attribute(어트리뷰트) 란? (0) | 2022.05.16 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.