본문 바로가기
[ Program ]/c#스터디

11.형변환

by 관이119 2021. 9. 20.





앞서 많은 형태의 변수를 배웠다.

인간의 머리는 수많은 개념과 정보들을 말도안되는 속도로 처리한다.

예를 들면 "1" 이라는 숫자를 어떤형태로 써도 알수 있다.

 

그림1

 

그림1을 보면 모두 숫자 1을 가리키는것을 알수 있다.

글씨체나 문자형태나 수식이거나 모두 상관없이 동일한 것을 가리킨다는것을 사람은 순식간에 알수 있다.

하지만 컴퓨터는 프로그래밍 되어있지 않으면 해당내용을 알수 없다.

 

 

 

하나의 변수를 연산을 하거나 문자로 연결을 하거나 할때는 정확한 형태로 변경한 후에 해당 작업을 해줘야 한다.

그작업을 형변환(type casting) 이라고 한다.

 

 

 

형변환은 여러가지 형태가 있다.

 

첫째로 모든 형태를 문자로 변경해줄때는 .ToString() 을 붙여주면된다.

예를 들면 다음과 같다.

int a = 10;
string b = a.ToString();
string c = Convert.ToString(b);

 

문자그대로읽어보면 알수있겠지만 string , 즉 문자로 변환해준다는 의미이다.

c 같은경우는 생소한 내용이지만 .ToString() 과 동일한 내용이다.

해당내용은 함수를 배우고 나서 더 자세히 배우겠지만 형식은 다음과 같다.

Convert.(변경해줄 형식)(변경해줄내용);

Convert 를 입력하고 . 을 찍으면 변경해줄 형식을 선택할수 있다.

선택해줄 내용이 나오는건 인텔리센스라고 하는데 미리 정의되어있는것들을 보여주는것이다.

이내용도 함수를 배우고 나서 다시 살펴보자.

 

 

둘째로 숫자를 다른타입의 숫자로 변경해줄때는 (변경해줄형식) 으로 변경해주면 된다.

예를 들면 다음과 같다.

int a = 10;
double b = (int)a;

double c = Convert.ToInt32(a);

 

문자열 형변환과 다른형태라서 머리에 잘들어오지 않을것이다.

형변환은 여러가지로 할수 있게 해놨는데 기본은 Convert.(변경해줄 형식)(변경해줄내용); 형태이다.

이형태는 명시적 형변환이라고 하는데 어떤형태로 변경해줄것인지 내가 직접지정하고 컴파일러(빌드하는걸 컴파일이라고 하는데 컴파일해주는 프로그램을 컴파일러라고 한다.) 에게 책임지고 정확하게 동작하게 하라고  지시한다는 의미이다.

다음예제를 보자.

 

double a = 1000000000000000000.2313213;

int b = (int)a;

MessageBox.Show(b.ToString());

 

어떤값이 나올지 생각해보자.

형식들을 보면 미리 유추할수 있겠지만 b 의 최대값을 a 가 넘어버린다.

그런데도 아무 에러없이 빌드되고 실행된다.

다만 결과값을 확인해보면 이상한값이 나올것이다.

위는 암시적으로 형변환을 해줘서 그런것인데 암시적형변환은 코드가 짧아지는대신 위와같은 위험성이있다.

 

다음으로 명시적형변환을 보자.

 

double a = 1000000000000000000.2313213;

int b = Convert.ToInt32(a);

MessageBox.Show(b.ToString());

 

위와같이 소스를 변경하면 아래 그림2와 같이 에러가 발생한다.

 

 

그림2

 

 

정상동작하지 않는다고 사용자에게 알려주는것이다.

그러면 모든 형변환을 해줄때 위와같이 명시적형변환을 해주면 되지않냐는 생각이 들수 있다.

그생각은 맞다.

하지만 많은 사람들이 알고있는것들을 구지 소스를 늘리면서 쓰지않기 때문에 명시적형변환과 암시적형변환은 항상 혼용된다.

형변환은 항상 많이 사용되기때문에 시간이 지나면 나도 모르게 손에 익을 것인데 여러 방식이 있다는것을 알고 여러형식의 변수들을 직접 변환해보고 실행해보며 어떤에러가 생기고 어떻게 변환되는지 계속반복학습하는것이 좋다.

 

정리하면 다음의 형태로 형변환을 할 수 있다.

.ToString()

Convert.대상형식(실제변경해줄값)

(변경해줄형식)현재값

 

참고로 Convert.ToInt32(대상값) 은 int 형식으로 변경한다는 의미이다.

 

 

타입을 int 로 사용할경우 int32 와 같다.

 

 

***숙제 : 여러 타입으로 형변환을 연습해보고 나온결과값이나 발생한 문제점들을 공유할것.

'[ Program ] > c#스터디' 카테고리의 다른 글

13.윈폼컨트롤 설명  (0) 2021.09.20
12.윈폼/콘솔프로그램 실행법  (0) 2021.09.20
10.변수연산 문자형 / 문자열 보간  (0) 2021.09.20
9.변수,자료형 3(char , string)  (0) 2021.09.20
8.변수연산 숫자형  (0) 2021.09.20

댓글