NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# 25. C#의 OverflowException과 checked 및 unchecked 키워드.

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 정말 오랜만에 C#관련 글을 적네요. 얼마전에 실수로 자료를 날려먹어서 복구할 수 없었습니다. 강의 자료와 그동안 해왔던 프로젝트 자료들이 모두 사라져서 한동안 맨붕에 빠져 있었거든요^^;

     

    사실 초반에 다뤘어야하는 checked와 unchecked에 대해 잠깐 알아보도록 하겠습니다. checked 컨텍스트 또는 unchecked 컨텍스트에서 C#문을 실행할 수 있습니다. checked 컨텍스트에서는 산술 오버플로가 있으면 예외를 발생시키고, unchecked 컨텍스트에서는 산술 오버플로가 무시되며 결과가 잘립니다. 만약, checked 또는 unchecked를 지정하지 않으면 기본 컨텍스트는 컴파일러 옵션에 따라 처리됩니다.

    Program.cs

    namespace CheckedAndUncheckedTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                checked
                {
                    // int.MaxValue = 2147483647
                    int n = int.MaxValue; 
                    n = n + 1; 
    
                    System.Console.WriteLine(n);
                    System.Console.ReadLine();
                }
            }
        }
    }

     

     

    F5(실행)를 눌러서 결과를 확인해보면, checked 컨텍스트 안에 int 자료형의 최대값보다 큰 값을 할당하고 있으므로 오버플로가 발생됩니다.

    ricSTQw.png

     

     

    checked를 unchecked로 변경한 후 다시 테스트 해보세요.

    Program.cs

    using static System.Console;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                unchecked
                {
                    // int.MaxValue = 2147483647                
                    int n = int.MaxValue; 
                    n = n + 1; 
                    WriteLine(n); 
                    ReadKey();
                }
            }
        }
    }

     

     

    위 코드에서 14와 15라인에 System.Console 네임스페이스가 생략되어 있습니다. 이는 1라인에 using static을 사용하여 정의했기 때문입니다. 참고로, 별칭을 지정해서 사용할수도 있습니다. 여하튼, 위 코드를 실행하면 아래와 같이 정상 실행되는 것을 확인할 수 있습니다.

    PPHJ5yU.png

     

     

    콘솔 응용 프로그램의 경우 기본적으로 오버플로와 언더플로를 체크하지 않도록 설정되어 있습니다. 그래서 unchecked 컨텍스트를 제거해도 동일한 결과를 얻게 됩니다.

    만약, 콘솔 응용 프로그램에서 기본적으로 산술 오버플로와 언더플로를 체크하도록 하려면 컴파일 옵션을 변경해야 합니다. 해당 프로젝트의 속성에서 빌드 탭으로 이동한 후 하단에 "고급"을 클릭하세요.

    p5XT59G.png

     

     

    "산술 연산 오버플로/언더플로 확인(K)"을 체크하면 checked 키워드를 사용하지 않아도 됩니다.

    9vNyZuf.png

     

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.