우리가 프로그래밍을 하면서 만날 수 있는 에러는 아래의 그림과 같습니다.
- 컴파일애러 (Compilation Error)
프로그램의 실행을 막는 오류입니다. Visual Basic 컴파일러가 이해하지 못하는 코드를 발견하면 컴파일러 오류가 발생합니다.
대부분의 컴파일러 오류는 코드 입력 시의 실수, 다시 말해 문법적인 오류 때문에 발생합니다.
- 키워드의 맞춤법이 틀리거나
- 필요한 문장 부호를 빠뜨리거나 (;인 경우가 가장 많은 듯..)
- If 문을 먼저 사용하지 않고 End If 문을 사용
- 선언되지 않은 변수 사용
- 런타임 애러 (Runtime Error)
이름 그대로 프로그램 실행 중에 발생하는 오류입니다.
이러한 오류는 일반적으로 프로그램에서 수행할 수 없는 작업을 시도할 때 발생합니다.
설계 미숙에서 드러나는 예는 아래와 같은 것들이 있습니다.
- 무한 루프에 빠지는 경우
- Null point error
- segmentation fault/bus error - 존재하지 않는 메모리 위치에 접근하려 할 때
- 논리 애러 (Logic Error)
논리 오류는 사용자가 의도한 작업을 프로그램에서 수행하지 못하는 오류입니다.
코드는 오류 없이 컴파일 및 실행될 수 있지만 작업 결과가 예상과 다를 수 있습니다.
작성자가 예상한 알고리즘 등이 틀렸다는 것을 나타내는데요,
따라서 에러 메세지가 따로 나타나지 않아 오류를 교정하는 것이 어렵습니다
- 시스템 애러 (System Error)
시스템 차제의 문제에 의해 발생되며 개발자가 처리하기 어렵습니다.
프로그램 동작 중에 운영체제 또는 하드웨어 문제가 발생하여 프로그램이 정상적으로 동작되지 않는 경우에 발생합니다.
운영체제 또는 시스템, 네트워크, DB등을 확인 후 해당 문제를 해결해야 합니다.
- 링킹 애러(Linking Error)
흩어진 소스 코드 파일들을 컴파일한 뒤 각자 연결할 때 발생하는 에러입니다.
예를 들어 어딘가에 선언되어 있는 헤더 파일이나 다른 코드 파일이 실제로는 존재하지 않을 때 이러한 오류가 나타납니다.
파일이 위치에 맞게 제대로 있는지, 선언하는 과정에서 또는 함수명에서 철자 등을 빼먹거나 오타를 낸 것은 아닌지 확인해봐야 합니다.
- Syntax Error(구문적 오류)
프로그래밍 언어의 문법적인 에러를 말한다.
컴파일 과정에서 나오는 것들이며, 구문 오류, 컴파일 타임 에러라고도 한다.
예를 들어, 키워드를 잘못 작성하거나, 구두점을 빠뜨리거나, 괄호를 연 후 닫지 않는 것과 같은 경우를 말한다.
문법 오류는 보통 컴파일러가 어떤 줄에서, 어떤 이유로 발생했는지 알려주기 때문에 해결하기 쉬운 편이다.
- Semantic Error(의미적 오류)
프로그래밍 언어의 문법은 정상적이지만 실행의 결과가 원하는 대로 나오지 않는 오류을 말한다.
문법적으로는 옳기 때문에 컴파일 오류는 나타나지 않지만, 의도하지 않은 결과가 나온다는 점에서 문제가 된다.
컴파일러가 오류를 잡아주지 않아 사람이 검출해야 해서 다른 오류보다 수정이 어렵다.
* Semantic Error vs Logical Error
둘은 프로그램의 결과가 의도대로 나오지 않는 다는 점에서 비슷하다.
Logical Error는 글자 그대로 의미적인 오류가 아닌 논리적인 오류가 발생한다.
예를 들어 설명하자면,
Semantic Error는 변수 X를 사용해야하는 곳에서 변수 Y를 사용하여 의도하지 않은 결과가 나온 것이고,
Logical Error는 문제를 잘못 이해하여 X+Y 연산을 해야하는 곳에서 X-Y연산을 하여 의도치 않은 결과가 나온 것이라고 말할 수 있다.
Q. 어째서 인덱스 오류와 같은 논리적 오류는 잡아내지 못하고 컴파일하고 실행하게 될까요?
A. 논리오류는 프로그램이 부정확하게 동작하지만, 비정상적으로 종료/ 충돌시키지 않는 버그.
논리오류는 비록 즉시 인식되지는 않지만, 의도치 않은/ 바라지 않은 결과나 행동을 유발함.
구문오류와는 다르게 논리오류는 비록 의도되지 않은 행동을 하지만, 언어상으로는 유효한 프로그램임.
논리오류를 찾는 방법중 하나는 코드에서 오류의 위치를 정의하기 위해 프로그램의 변수들의 출력을 파일이나 화면에 나오게 하는 것.
참고자료
https://hyeran-story.tistory.com/63
https://codesyun.tistory.com/78
https://woodforest.tistory.com/173
'CS' 카테고리의 다른 글
프로세스 주소공간 (0) | 2022.04.15 |
---|---|
파스칼 케이스 / 카멜 케이스 / 스네이크 케이스 - 표기법 구분하기! (0) | 2022.04.06 |
프로세스 & 스레드 란? Process와 Thread 정리 (0) | 2022.04.05 |
바이너리 파일이란? (0) | 2022.02.24 |
JDK vs JRE (0) | 2022.01.24 |