재우니의 블로그



형식변환에 대해 살펴보죠.

형식변환이란 가끔 데이터 형식끼리 변환해야 할 필요가 있을 때가 있죠. 그럴때 사용합니다.

형식변환에는 2가지로 분류할 수 있는데요.


암시적 형식 변환, implicit type conversion 이라고 하며, 
명시적 형식 변환, explicit type conversion 이라고 합니다.



1) 암시적 형식변환

데이터 형식끼리 변환을 하고자 할 경우, 값이 변하지 않는다는 보장이 있으면 자동적으로 이루어질 수 있습니다.

using System;

public class test
{
    public static void Main()
    {
        short a = 10;
        short b = 20;
        int tot;
        tot = a + b;

        checked //오버플로러 검사하기 위해서 기재함.
        {
            Console.WriteLine(tot);
        }

    }
}




int 형은 short 형보다 많이 담을 수 있답니다. int 형은 32비트 정수형을 담을 수 있고요. short 형은 그 보다 작은 16비트 정수형을 담을 수 있답니다.

따라서 사용자가 굳이 데이터 형식변환을 명시하지 않아도 알아서 형식변환을 해줍니다. 이를 암시적 형식변환이라고 합니다. 한마디로 작은 범위에서 큰 범위로의 변환이라고 생각하시면 되겠네요.



==========================================


이번은 명시적 형식변환에 대해 알아보죠.

암시적으로 변환할 수 없는 것들에 대해 명시적 형식변환을 해야 합니다. 이는 어떤 데이터형식을 다른 데이터 형식으로 강제로 형식 변환하는 것을 의미합니다. 아래는 암시적 형식변환으로 바꿀 수 없는 경우를 보여주고 있죠.


1) int -> short 으로 변환
2) int -> uint 으로 변환
3) uint -> int 으로 변환
4) float -> int 으로 변환
5) 숫자형 -> char 으로 변환
6) decimal -> 다른 형식으로 변환



그러면 명시적 형식변환은 어떻게 하는지 아래의 소스를 보죠.

long longs = 30000;
int i = (int)longs;



형식변환을 명시적 형식변환으로 강제적 변환을 했지만, int 형의 최대값은 2147483647 입니다. 따라서 코드를 실행할 경우 정확한 값을 얻기가 어렵습니다. 따라서 오버플로를 검사하기 위해서는 checked 라는 연산자를 제공하며 점검을 할 수 있답니다.

int i = checked((int)longs);


그리고 숫자형을 문자형으로 형변환을 하고자 할 경우,

int i = 33;
string s = i.ToString();


object 의 ToString 이라는 메소드를 사용하는 것을 볼 수 있답니다.

문자형을 숫자형으로 형변환을 하고자 할 경우는 어떻게 사용할까요?

string a = "200";
int i = int.Parse(a);


Parse 메소드를 사용하는 것을 볼 수 있답니다.



posted by 심재운 (shimpark@gmail.com)