컴퓨터는 기본적으로 매우 정확한 기계다. 1+1 같은 계산은 절대 틀리지 않고, 같은 입력을 주면 항상 같은 결과를 낸다. 그래서 처음에는 “컴퓨터는 완벽하다”는 느낌을 받기 쉽다. 그런데 막상 프로그램을 사용하다 보면 오류가 자주 발생한다. 갑자기 프로그램이 멈추거나, 예상과 다른 결과가 나오기도 한다. 나도 처음에는 이게 이해가 잘 안 됐다. 이렇게 정확한 기계가 왜 이렇게 자주 틀릴 수 있을까?

컴퓨터는 틀리지 않지만, 프로그램은 사람이 만든다
이 문제를 이해하려면 먼저 중요한 차이를 알아야 한다. 컴퓨터 자체는 계산을 틀리지 않는다. CPU는 주어진 명령을 그대로 실행하고, 전기 신호에 따라 정확하게 연산을 수행한다. 즉, 기계적인 관점에서는 오류가 거의 없다.
문제는 그 위에 올라가는 ‘프로그램’이다. 프로그램은 사람이 만든 논리의 집합이다. 그리고 사람은 완벽하지 않다. 조건을 하나 빠뜨리거나, 특정 상황을 고려하지 않거나, 논리를 잘못 구성하면 그게 그대로 오류로 이어진다.
나도 간단한 코드를 짤 때 “이 정도면 되겠지”라고 생각하고 넘어갔다가, 예상하지 못한 입력이 들어왔을 때 문제가 생긴 경험이 있다. 그때 느낀 건 컴퓨터가 틀린 게 아니라, 내가 생각을 덜 했다는 점이었다.
즉, 컴퓨터는 항상 정확하게 실행하지만, 그 명령 자체가 잘못되어 있으면 결과도 틀릴 수밖에 없다.
모든 상황을 완벽하게 예측하는 것은 거의 불가능하다
프로그램에서 오류가 생기는 또 다른 이유는 “모든 경우의 수를 다 고려하기 어렵다”는 점이다. 현실 세계는 생각보다 복잡하고, 입력값도 다양하다.
예를 들어 어떤 프로그램이 숫자를 입력받는다고 해보자. 우리는 보통 정상적인 값만 생각한다. 그런데 실제로는:
- 아주 큰 숫자
- 음수
- 아예 문자열 입력
- 비어 있는 값
이런 다양한 경우가 들어올 수 있다.
이 중 하나라도 제대로 처리하지 않으면 오류가 발생한다. 나도 예전에 입력값 검증을 제대로 안 해서 프로그램이 아예 멈춰버린 적이 있었다. 평소에는 잘 작동하니까 문제를 못 느끼다가, 특정 상황에서 갑자기 터지는 경우다.
이걸 흔히 ‘엣지 케이스(edge case)’라고 부른다. 문제는 이 엣지 케이스가 생각보다 많다는 점이다. 그래서 프로그램이 완벽하게 동작하게 만드는 것은 생각보다 어려운 작업이다.
작은 논리 오류 하나가 전체 결과를 망칠 수 있다
프로그램의 또 다른 특징은, 아주 작은 실수도 큰 문제로 이어질 수 있다는 점이다. 예를 들어 조건문 하나를 잘못 쓰거나, 변수 값을 하나 잘못 설정하면 전체 결과가 완전히 달라질 수 있다.
나도 예전에 반복문 조건을 하나 잘못 써서 프로그램이 끝나지 않고 계속 실행되는 상황을 겪은 적이 있다. 코드 한 줄이었지만, 결과는 전체 시스템이 멈춘 것처럼 보였다.
이런 경험을 하고 나서 느낀 건, 프로그램은 “조금 틀린 상태”로 존재하기가 어렵다는 점이다. 100% 맞거나, 아니면 완전히 잘못되거나 둘 중 하나인 경우가 많다.
그래서 컴퓨터는 완벽하게 계산을 해도, 그 위에 올라가는 프로그램은 인간의 실수와 복잡한 상황 때문에 오류가 생길 수밖에 없다.
한 줄로 정리하면 컴퓨터는 항상 정확하게 계산하지만, 프로그램은 사람이 만든 논리이기 때문에 작은 실수나 예상하지 못한 상황으로 인해 오류가 발생할 수 있다.