본문 바로가기
C#

[C#] 묵시적(Implicit), 명시적(Explicit) 형변환

by ifhead 2022. 9. 10.
반응형

형식 변환은 크게 묵시적(암시적) 형변환과 명시적 형변환으로 구분할 수 있습니다. 묵시적 형변환은 변환 형식이 안전하게 유지됩니다. 데이터가 손실되지 않는 특성으로 인해 특수한 구문이 필요치 않습니다. 예를 들어 숫자 형식 중 int는 그보다 큰 long 형식에 그대로 담을 수 있습니다.

 

Data TypeSize (bytes)Range

byte 1 0..255
sbyte 1 -128..127
short 2 -32,768 .. 32,767
ushort 2 0 .. 65,535
int 4 -2,147,483,648 .. 2,147,483,647
uint 4 0 .. 4,294,967,295
long 8 -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807
ulong 8 0 .. 18,446,744,073,709,551,615
float 4 -3.402823e38 .. 3.402823e38
double 8 -1.79769313486232e308 .. 1.79769313486232e308
decimal 16 -79,228,162,514,264,337,593,543,950,335 .. 79,228,162,514,264,337,593,543,950,335
bool 1 True or False
char 2 A unicode character (0 .. 65,535)

 


 

묵시적 형변환

short shortNumber = 23;

// Implicit conversions
int intNumber = shortNumber;
float someFloat = shortNumber;
double firstDouble = intNumber;
double secondDouble = shortNumber;

 

묵시적 형변환 테이블

From           To 
sbyte          short int long float double decimal 
byte           short ushort int uint long ulong float double decimal 
short          int long float double decimal 
ushort         int uint long ulong float double decimal 
int            long float double decimal 
uint           long ulong float double decimal 
long ulong     float double decimal 
float          double 
char           ushort int uint long ulong float double decimal

 

묵시적 형변환 그래프

형변환 그래프

 


 

명시적 형변환

long을 int에 저장하려면 다음처럼 명시적으로 (int) 구문을 붙여서 형변환해야합니다.

명시적 형변환은 Casting이라고도 합니다.

 

이 경우에는 데이터가 손실될 수 있습니다. 에러가 발생하지 않지만 잘못된 값이 저장되는 경우를 봅시다. 큰 타입을 작은 타입 안에 저장할 때 주의해야 합니다.

long l = long.MaxValue; // long의 가장 큰 값 저장
// l 출력 : 9223372036854775807
int i = (int) l;
// i 출력 : -1
// int 값의 범위를 벗어나, 잘못된 값이 저장되었습니다.

 

Convert 클래스로 형식 변환

double d = 12.34;
int i = 1234;

d = i;
// d 출력 : 1234

d = 12.34;
i = (int) d;
// i 출력 : 12

string s = "";
s = Convert.ToString(d);
// s 출력 : 12.34

 

문자열을 정수 형식으로 변환하는 세 가지 방법

Convert.ToInt32(str);

int.Parse(str);

Int32.Parse(str);

 

TryParse로 안전하게 형변환

using System;

public class Example
{
   public static void Main()
   {
      string[] values = { null, "160519", "9432.0", "16,667",
                          "   -322   ", "+4302", "(100);", "01FA" };
      foreach (var value in values)
      {
         int number;

         bool success = int.TryParse(value, out number);
         if (success)
         {
            Console.WriteLine($"Converted '{value}' to {number}.");
         }
         else
         {
            Console.WriteLine($"Attempted conversion of '{value ?? "<null>"}' failed.");
         }
      }
   }
}
// The example displays the following output:
//       Attempted conversion of '<null>' failed.
//       Converted '160519' to 160519.
//       Attempted conversion of '9432.0' failed.
//       Attempted conversion of '16,667' failed.
//       Converted '   -322   ' to -322.
//       Converted '+4302' to 4302.
//       Attempted conversion of '(100);' failed.
//       Attempted conversion of '01FA' failed.

 

반응형

댓글