형 변환의 필요성
앞선 내용에서 Console.WriteLine()에 대해서는 몇까지 사용법을 알려주었지만
Console.ReadLine() 에대해서는 별말을 하지않았던 이유가 여기서 나온다.
만약 내 나이를 입력받고 그것을 출력하는 프로그램을 짠다면 일단
아래의 코드 처럼 할 것이다.
int age = Console.ReadLine();
문제는 여기서 오류를 뿜어낸다는 것이다.....
왜일까 ? 난 숫자로 나이를 입력받아서 그냥 age 라는 변수에 넣으려고 했을 뿐인데..
오류를 잘 읽어보면 어렵게 써있겠지만
한마디로 "String 형식을 int 형식으로 바꿀수없다"면서 오류가 발생한다 라는 것이다.
즉 형태가 안맞다는 건데 이걸 통해서 Console.ReadLine() 은 string 형식으로 값을 만들어준다는 걸 알 수 가 있다
다시정리하면
int 타입에 age에 string 값을 넣으려고하는 이상한 행동을 하는것이라 오류가 나는것이다.
이 문제를 해결하려면
형 변환 이라는 것에 대해 알아보아야한다.
형변환 (Type Casting)
형변환(Type Casting)이란 변수의 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.
C#에서는 기본형(primitive) 데이터 타입들 간에 형변환이 가능하다.
이때 형변환은 명시적(explicit) 형변환과 암시적(implicit) 형변환 으로 나뉜다.
명시적(explicit) 형변환
변환할 데이터의 앞에 변환할 자료형을 괄호안에 넣어 형변환 진행한다.
[(형변환할 타입)][형변환할 값]
double doubleNum = 10.5;
int num1 = (int)doubleNum; // 명시적 형변환
string str= "10";
int num2 = (int)str; // 문자열 "10" 을 인트형 10 으로 만든다.
위의 코드 처럼 만들면된다.
이 형변환 과정에서 담을 수 없는 변수의 값은 버려지게된다. 위에 num1 에는 10 의 값만 남을 것 이다.
암시적(implicit) 형변환 - 자동 형변환
작은 데이터 타입에서 더 큰 범위를 가지고 형 변환이 가능한 데이터 타입으로 변환할때는
자동으로 형변환이 되기도 한다.
// 형 변환이 가능한 경우 자동으로 형변환이 진행됨
float fValue = 3; // 소수형 변수에 정수형 데이터를 넣을 경우 자동형변환 가능
double dValue = 1.2f; // double은 float를 포함하는 큰 범위이니 자동형변환 가능
//자동 형변환이 가능하더라도 명시적으로 표현하는 걸 추천한다.
dValue = (float)i;
문자열의 형변환
위에 형변환을 잘보았으면 처음 나온 문제를 아래와 같이 해결하려고 할 수 도 있을 것 이다.
int age = (int)Console.ReadLine();
웃긴건 이렇게해도 문제가 발생한다.
정답을 말해주자면 문자열은 단순하게 그냥 형변환이 불가능하다.
문자열을 형변환 해주고싶으면 각 자료형의 Parse를 이용하여 형변환 해야한다.
(이미만들어진 함수이다.)
Parse를 이용하여 변환이 불가능한 경우 예외처리 발생한다.(에러가난다.)
나중에 알아볼것이지만 기본 데이터 타입들이 구조체혹은 클래스로 정의되어있기 때문에 이러한 parse 기능을 사용할 수 있는 것이다.
string text = "150";
// i = (int)text; // 에러 : string 자료형을 정수형 자료형으로 단순형변환은 불가능
i = int.Parse(text); // int.Parse를 통해 string 자료형을 int로 변환
text = "형변환";
// iValue = int.Parse(text); // 에러 : 텍스트 "형변환"은 int 자료형으로 변환할수없기때문에 변환되지않는다.
///위에 있었던 문제 해결
int age = int.Parse(Console.ReadLine());//이런식으로 형변환 하면된다.
주의점은 위에 코드에 예시처럼 형변환 할수없는 형태는 변환 할 수 없다.
TryParse() 함수를 통해서 해당 타입으로 변환가능한지 체크할 수 도 있다.
이제 콘솔에 입력값도 어느정도 컨트롤 할수 있고 출력값도 만들 수 있으니
간단한
이름과 나이를 입력받아서 이쁘게 출력하는 그런 프로그램을 하나 만들어보자.
더 다양한 건 좀더 알아보고 진행해보자.
참고 코드
https://github.com/dMinsz/Csharp_Basic/blob/master/2.BasicTypeCast/Program.cs
'프로그래밍언어 > 누구나 배워보는 C#' 카테고리의 다른 글
[C#] 4. 연산자 (Operator) (1) | 2023.04.16 |
---|---|
[C#] 2. 변수와 타입 (0) | 2023.04.16 |
[C#] 1. C#의 주석과 몇 까지 알아두어야 할 것들 (0) | 2023.04.07 |
0. 준비하기 / 비주얼 스튜디오 2022 설치법 (0) | 2023.04.06 |