프로그래밍 에러 알아보기
코드를 작성하다보면 에러가 나올 때가 있다.
예전에 경험했던 면접에서도 물어봤던 질문 중 하나인데 오늘은 그 에러의 종류에 대해 기록해보려 한다.
오류의 종류는 크게 Syntax Error(구문 오류), Runtime Error(실행 오류), Semantic/Logical Error(의미적 오류)로 나눌 수 있다.
구문 에러 (Syntax error)
문법적인 에러를 팔한다.
컴파일 과정에서 나오는 것들이며 구문오류, 컴파일 타임 에러라고도 한다.
예를들어, 키워드를 잘못 작성하거나, 괄호를 연 후 닫지 않은 것과 같은 경우를 말한다.
구문 오류는 프로그램의 구조에서 잘못된 부분을 알려줘서 비교적 해결하기 쉬운 편이다.
런타임 에러 (Runtime error)
프로그램 실행 중에 프로그램이 비정상적으로 종료되게 하는 오류를 말한다.
런타임 오류 메시지는 대부분 오류가 발생한 위치, 실행 중인 함수같은 정보를 담고 있기도 한다.
대표적인 런타임 에러로는 잘못된 입력이 있는 경우 발생하는 입력 오류가 있다.
컴파일 에러 (Compile error)
문법을 잘못 작성하면 발생하고 컴파일 시 오류를 일으키게 된다.
오류가 발생한 부분을 수정하고 다시 컴파일하면 비교적 쉽게 해결할 수 있다.
어느 곳에 문제가 있는지 컴파일러가 정확한 위치를 알려준다.
대표적으로 맞춤법, 문장부호, 선언되지 않은 변수 사용이 있다.
파스 에러 (Parse Error)
인터프리터 언어에서 문법의 오류로 인해 나타내는 에러이다.
인터프리터의 컴파일에러 같은 느낌이다.
논리 에러 (Logic error)
프로그래머의 논리적 오류에 의해 발생한다.
컴파일은 되나 실행시 에러가 발생하고, 덧셈을 했어야할 상황에서 뺄셈을 하는 것처럼 프로그래머의 논리적 실수에 의해 발생한다.
(예를들어, 나눗셈을 할 때 0으로 나눈 경우)
의미적 오류 (Semantic error)
프로그래밍 언어의 문법은 정상적이지만 실행의 결과가 원하는 대로 나오지 않는 오류를 말한다.
문법적으로는 옳기 때문에 컴파일 오류는 나타나지 않지만, 의도하지 않은 결과가 나온다는 점에서 문제가 된다.
컴파일러가 오류를 잡아주지 않아 사람이 검출해야 해서 다른 오류보다 수정이 어렵다.
논리에러 vs 의미적 오류
논리에러는 x+y를 해야하는 곳에 x-y 연산을 해서 의도하지 않는 결과가 나온 경우
의미적 오류는 변수 x를 사용할 곳에 y를 사용하여 의도하지 않는 결과가 나온 경우
링킹 에러 (Linking error)
흩어진 소스 코드 파이들을 컴파일 한 뒤 각자 연결할 때 발생하는 에러다.
대표적으로는 선언된 헤더 파일이나 다른 코드 파일이 실제로 존재하지 않을 때(위치나 이름이 잘못됐을 경우)가 있다.