본문 바로가기

C#/C# 기초 강의

C# 프로그래밍 강좌 5 - 변수와 자료형 2 (오버플로우)

728x90
728x90

여러분은 이전 게시글에서 각 자료형이 특정한 범위를 가지고 있음을 알고 간단한 사칙연산을 해보았다.

Overflow

그러면 그 자료형의 범위를 넘어선 값이 담기게 되면 어떻게 될까?

int x = 2147483647;
x += 1;

 

int 자료형은 이전에도 배웠다시피 최대 2147483647의 값을 가질 수 있다. 그런데 지금 2147483647으로 초기화 된 x에 1을 더하려 하고 있다. 어떻게 될까?

 

using System;

namespace TrainCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 2147483647;
            x += 1;
            Console.WriteLine("x의 값은 " + x + "입니다.\n");
        }
    }
}

 

참고로 위 코드처럼 서로 다른 자료형끼리 묶어서 같이 출력하려는 경우는 +로 이어주면 된다.

 

위 코드를 컴파일해서 실행해보자.

 

x의 값은 -2147483648입니다.

 

int 자료형의 최소값이 나와버렸다. 이게 무슨 일일까?

 

이 현상은 오버플로우라고 부르는 현상이다. 위 코드처럼 수용할 수 있는 한계를 벗어난 값이 들어갈 경우 그 값을 담지 못하여 그 반대 값의 처음부터 시작한다.

 

오버플로우를 자세히 이해하기 위해선 컴퓨터 메모리와 관련된 지식이 필요하지만 프로그래밍을 처음 배우는 여러분은 "자료형 고유의 한계보다 더 큰 값을 넣으려고 하면 의도하지 않은 값이 나오니 수치와 관련된 계산을 할 때는 이를 조심해야 된다." 정도로 이해하면 되겠다.

 

그러면 -2147483648에 1을 빼면 어떻게 될까? 직접 해보시라.

 

이렇게 우리는 오버플로우에 대해 알게 되었다. 오버플로우는 대부분의 프로그래밍 언어에 존재하는 현상이니 프로그래밍을 할 때 항상 조심하도록 하자.

728x90
728x90