C#/문법 정리

C# - 캐스팅(Casting)과 자료형 변환

Khadra 2024. 6. 21. 19:25

C#은 엄격하게 자료형을 체크한다.

예제 코드

double 형식의 리터럴을 암시적으로 'float'형식으로 변환할 수 없다.
float f = 1234.5; // error
  • 접미사 없는 실수는 double로 인식하기 때문이다.
  • 하나의 자료형을 다른 자료형으로 바꾸는 것을 형변환이라고 한다.

형변환은 두 가지로 나뉜다.

  • 1. 암시적 형변환

    • float를 double로 형변환하는 경우
    • 작은 자료형을 더 큰 자료형으로 변환할 때 = 데이터 손실이 생기지 않는다.
    • 이런 경우에는 자동으로 형이 변환된다.
  • 2. 명시적 형변환

    • double을 int로 변환하는 경우
    • 큰 자료형을 작은 자료형으로 변환할 때 = 데이터 손실이 생길 수 있다.
    • 이런 경우에는 강제 형변환을 시켜줘야 한다.

명시적 형변환을 위해서는 변환하고자 할 때

  • 하는 자료형으로 기존자료형을 캐스트(cast)해준다.
  • 예를 들어 double 변수 x가 있을 때 int a = (int)x;라고 하면 x를 int로 바꾼 후에 int 변수에 a에 할당한다.
    • 이때 x의 값이 소수점 아래 수를 가지고 있다면 정수로 변환되면서 소수점 아래 숫자는 잃어버린다.

예제 코드

using System;
using static System.Console;//Console단어를 생략(코드길이줄어둠)
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // int 변수 num을 선언하고 2147483647을 할당한다.
            int num = 2147483647; 

            // 암시적 형변환 
            // long 변수 bigNum을 선언하고 num 변수의 값을 할당한다.
            // int보다 long이 더 크므로 암시적 형변환이 가능하다.
            long bigNum = num; 

            // bigNum의 값을 출력한다.  
            // bigNum은 암시적 형변환으로 num값과 똑같은 값을 가지고 있다.
            WriteLine(bigNum); 

            // double x를 선언하고 1234.5를 할당한다.
            double x = 1234.5; 
            int a;

            // 명시적 형변환 
            // int 변수 a에 double 변수 x의 값을 할당한다.
            // int보다 double이 더 크므로 (int)로 캐스팅하여 강제로 형변환을 해준다.
            a = (int)x;  

            // int 변수 a를 출력한다.
            // 강제 형변환으로 소수점 아래는 손실된 것을 알 수 있다.
            WriteLine(a);         
        }
    }
}      

결과

2147483647
1234