C# 타입 변환 이해하기: 암시적 & 명시적 캐스팅 완벽 가이드
타입 변환(Type Conversion)은 한 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말합니다. 이는 타입 캐스팅(Type Casting)이라고도 불립니다. C#에서 타입 캐스팅은 두 가지 형태로 나뉩니다.
암시적 타입 변환 (Implicit Type Conversion)
이 변환은 C#이 타입 안전하게 자동으로 수행합니다. 예를 들어, 더 작은 정수 타입에서 더 큰 정수 타입으로의 변환이나 파생 클래스에서 기본 클래스로의 변환이 이에 해당합니다. 데이터 손실이 발생하지 않기 때문에 별도의 문법 없이 자연스럽게 이루어집니다.
명시적 타입 변환 (Explicit Type Conversion)
이 변환은 사용자가 미리 정의된 함수나 캐스트 연산자를 사용하여 명시적으로 수행합니다. 데이터 손실이 발생할 수 있는 경우(예: double을 int로 변환)에 필요하며, 캐스트 연산자 (타입)을 사용해야 합니다.
명시적 타입 변환 예제
using System;
namespace TypeConversionApplication
{
class ExplicitConversion
{
static void Main(string[] args)
{
double d = 5673.74;
int i;
// double을 int로 캐스팅 (소수점 이하 버림)
i = (int)d;
Console.WriteLine(i); // 출력: 5673
Console.ReadKey();
}
}
}
C# 기본 제공 타입 변환 메서드
C#은 Convert 클래스를 통해 다양한 내장 타입 변환 메서드를 제공합니다. 주요 메서드는 다음과 같습니다.
| 번호 |
메서드 및 설명 |
| 1 | ToBoolean 가능한 경우 타입을 불리언 값으로 변환합니다. |
| 2 | ToByte 타입을 바이트로 변환합니다. |
| 3 | ToChar 가능한 경우 타입을 단일 유니코드 문자로 변환합니다. |
| 4 | ToDateTime 타입(정수 또는 문자열)을 날짜-시간 구조체로 변환합니다. |
| 5 | ToDecimal 부동소수점 또는 정수 타입을 decimal 타입으로 변환합니다. |
| 6 | ToDouble 타입을 double 타입으로 변환합니다. |
| 7 | ToInt16 타입을 16비트 정수로 변환합니다. |
| 8 | ToInt32 타입을 32비트 정수로 변환합니다. |
| 9 | ToInt64 타입을 64비트 정수로 변환합니다. |
| 10 | ToSByte 타입을 부호 있는 바이트 타입으로 변환합니다. |
| 11 | ToSingle 타입을 단정도 부동소수점 숫자로 변환합니다. |
| 12 | ToString 타입을 문자열로 변환합니다. |
| 13 | ToType 타입을 지정된 타입으로 변환합니다. |
| 14 | ToUInt16 타입을 부호 없는 16비트 정수로 변환합니다. |
| 15 | ToUInt32 타입을 부호 없는 32비트 정수로 변환합니다. |
| 16 | ToUInt64 타입을 부호 없는 64비트 정수로 변환합니다. |
문자열 변환 예제
using System;
namespace TypeConversionApplication
{
class StringConversion
{
static void Main(string[] args)
{
int i = 75;
float f = 53.005f;
double d = 2345.7652;
bool b = true;
Console.WriteLine(i.ToString()); // "75"
Console.WriteLine(f.ToString()); // "53.005"
Console.WriteLine(d.ToString()); // "2345.7652"
Console.WriteLine(b.ToString()); // "True"
Console.ReadKey();
}
}
}
핵심 포인트: 암시적 변환은 안전할 때 자동으로 일어나지만, 명시적 변환은 개발자의 의도적 확인과 캐스트 연산자가 필요합니다. Convert 클래스 메서드는 런타임 검증과 예외 처리가 포함되어 더 안전하게 사용할 수 있습니다.