C# 입문 - 2 (강의록): 캐스팅, 스트링포맷

유키미아우·2024년 8월 12일
0

휘발되기 전에 휘갈김

캐스팅 (형식변환)

아래 처럼 큰 바구니에 담긴 값을 작은 바구니에 옮겨담으려고 하면?

int a = 100;
short b = a;

int (4바이트) 보다 short (2바이트)는 작기 때문에
일부 데이터가 잘려서 증발될 수 있어 에러가 난다.

int a = 100;
short b = (short)a;

따라서 위처럼 형식변환을 하겠다고 컴퓨터에게 명시적으로 가르쳐줘야한다.

그러나 모든 상황에서 무조건적으로 에러가 나지는 않는다.

int a = 100;
short b = (short)a;

float c = a;  // 이 라인에서는 에러가 나지 않지만
int d = (int)c; // 이 라인에서는 에러가 난다.

큰 곳에서 작은 곳으로 옮길 때 혹은 소수점이 잘릴 경우에는 에러가 난다.
100 이라는 int를 100.0f로 바꿀 때는 딱히 문제가 되는 변환이 아니나

13.5f를 int로 변환하게 되면 0.5 소수점이 증발되기 때문에 에러가 난다.

C나 C++은 경고가 뜨지 않으나 C#은 에러를 일으킨다고 한다.

CS0266에러에 대한 microsoft 공식문서

스트링 포맷

int a = 100;
string b = (string)a;

캐스팅을 통해서 정수를 string으로 변환 가능할까?
정답은... 불가능이다.

string input;
input = Console.ReadLine();
Console.WriteLine(input);

위 코드는 Console.ReadLine() 을 통해 유저의 터미널 인풋을 받아 input 변수에 담는다.
그리고 Console.WriteLine()가 input을 출력한다.
예를 들어 1을 입력해주면 "1"을 input으로 받아서 "1"을 출력해준다.

string input = Console.ReadLine();
int number = int.Parse(input);
Console.WriteLine(number);

위 코드는 100을 입력할 경우 string "100"을 정수 100으로 파싱하여 출력해준다.

만약 이 상황에서 "안녕"을 입력할 경우 정수로 파싱하는 것이 불가능하여
에러가 나며 프로그램이 crash하게 된다.

그렇다면 어떻게 숫자와 문자열을 조합해서 활용해볼 수 있을까?
과거부터 쓰이는 스트링 포매팅이라는 문법이 있다.

int hp = 200;
int maxHp = 200;

string message = string.Format("당신의 HP는 {0}/{1} 입니다.", hp, maxHp);
Console.WriteLine(message);

당신의 HP는 200/200 입니다.
가 콘솔에 뜨게 된다.

위 문법은 치환해야하는 개수가 늘어나면 가독성이 매우 떨어지게 되는 단점이 있다.
최신 문법 중에서는 이 단점을 보완해주는 스트링 인터폴레이션도 있다.

string message = $"당신의 HP는 {hp}/{maxHp}입니다";
Console.WriteLine(message);
profile
능동적인 마음

0개의 댓글