250x250
Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

minjea.dev의 코딩블로그

[c#] 형변환 본문

코딩강좌/c#

[c#] 형변환

minjea.dev 2022. 4. 15. 12:00
728x90

오늘은 c#의 기능중, 형변환이라는것을 알아보겠습니다. 기본 자료형 강의에서 말씀드렸던, c#의 기본 자료형중, 숫자 형식을 이용하여 형변환을 알아보겠습니다.

 

int 타입은 -2,147,483,648 ~ 2,147,483,647의 범위의 수를 포함할수 있고, sbyte는 -128 ~ 127, byte는 0 ~225, short는 -32,768 ~ 32,767의 범위의 수를 포함할수 있습니다. 즉, int 타입은, sbyte, byte, short 등을 포함할수 있다는 소리입니다. 따라서, sbyte, byte, short등은 int로 형변환을 할수 있는데, 다음과 같이 가능합니다.

sbyte _sbyte = 127;
byte _byte = 225;
short _short = 32767;

// 형변환
int _sbyte_ = _sbyte;
int _byte_ = _byte;
int _short_ = _short;

이렇게 int 타입의 변수에 sbyte, byte, short타입의 변수를 대입하면, 오류가 발생하지 않는데, 그 이유는, c#에서 알아서, int 타입으로 타입을 변환하기 때문입니다. int 타입은 sbyte, byte, short 타입을 모두 포함할수 있기 때문입니다. 이런 경우를 c#이 자동으로 형변환을 하였다 하여, 암시적 형변환, 자동 형변환 이라고 합니다.

 

그렇다면 int 타입 변수를 sbyte, byte, short형식으로 바꾸는건 불가능할까요? 한번 시도해봅시다.

int i = 0;

// 형변환. 오류 발생
sbyte _sbyte = i;
byte _byte = i;
short _short = i;

분명히, sbyte, byte, short가 모두 포함이 가능한 숫자인 0을 대입하여 형변환을 시도했으니, 오류가 나지 않을것 같은데, 왜 오류가 날까요? 왜냐하면, c#은 그런것까지는 생각하지는 않습니다. 다만, int형의 범위가 약 -2,147,483,648 ~ 2,147,483,647이기 때문에, sbyte, byte, short의 범위를 너무 넘어서기 때문에 오류가 발생합니다.

 

그러면 int 형을 sbyte, byte, short형으로 변경할수는 없을까요? 변환이 가능합니다. 그렇다면 어떻게 변환할수 있을까요? 바로, 다음 형식으로 가능합니다.

타입 변수명 = (변환할 타입)값;

그렇다면 이 문법 그대로, 아까 실패한 형변환을 한번 시도해 봅시다.

int i = 0;

// 형변환. 오류 발생
sbyte _sbyte = (sbyte)i;
byte _byte = (byte)i;
short _short = (short)i;

결과는? 와! 오류가 나지 않습니다. 이게 어떻게 된 일일까요? 바로, 이 경우에는 개발자가 직접 원해서 형변환을 시도한것이라고 c#이 판단하기 때문입니다. 이런 형변환을 바로 명시적 형변환이라 합니다. 이제 아까 오류가 난 이유에 대하여 알수 있게 되었습니다. 바로, 암시적 형변환은 개발자가 모르고 코드를 잘못 짜는것을 방지하는 차원에서 오류를 발생시키는 것이었습니다

 

오늘은 이렇게 형변환에 대하여 알아보았습니다. 그렇다면 다음 시간에는 virtual 그리고 override에 대하여 알아보도록 하겠습니다.

728x90