프로그래밍/(도서)C#코딩의기술-실전

[C#] 코딩의기술(실전편) - 2.5 Checked 키워드

Victory_HA 2022. 3. 31. 22:28

  • Checked 키워드 : 정수 형식 산술 연산 및 변환에 대한 오버플로우 검사를 명시적으로 사용하도록 설정하는 데 사용됩니다.
  • UnChecked 키워드 :정수 형식 산술 연산 및 변환에 대한 오버플로 검사를 비활성화하는 데 사용됩니다.

오버플로우 예제

static void Main(string[] args)
{
    var num = 1234;
    for (int i = 0; i < 21; i++)
    {
        num *= 2;
        Console.WriteLine(num);
    }
    for (int i = 0; i < 21; i++)
    {
        num /= 2;
        Console.WriteLine(num);
    }
    Console.WriteLine(num);
}

실행결과

  • 오버플로우 발생하여 '1293942784 * 2 = -1707081728'이란 음수 값이 반환됩니다.
  • Checked 키워드 사용하면 오버플로우 발생하는 순간 예외를 발생시킵니다.

Checked 사용 결과

Checked 키워드 무조건 사용하는 게 좋을까?

  • 오버플로우 방지책으로 Checked키워드를 사용하는 건 좋은 방법입니다.
  • 하지만 Checked를 사용하면, 사용하지 않았을 때 보다 연산 속도가 느립니다.
  • checked키워드를 사용하기 전에 오버플로우가 발생할지 값의 표현 범위가 충분한 데이터 형을 지정해야 합니다.

Checked vs Unchecked 예제

static void Main(string[] args)
{
    unchecked
    {
        var start = DateTime.Now;
        for (int i = 0; i < 10000; i++)
        {
            int a = 0;
            for (int j = 0; j < 100000; j++)
            {
                a += 1;
            }
        }
        Console.WriteLine(DateTime.Now - start);
    }
    checked
    {
        var start = DateTime.Now;
        for (int i = 0; i < 10000; i++)
        {
            int a = 0;
            for (int j = 0; j < 100000; j++)
            {
                a += 1;
            }
        }
        Console.WriteLine(DateTime.Now - start);
    }
}

실행결과

정리

  • 코드의 안전성을 위해선 checked 키워드 사용한다.
  • 코드의 속도를 위해선 checked 키워드 사용하지 않는다.