흔히들 컴퓨터 과학 수업을 듣거나, 프로그래밍을 하다 보면 위의 두 단어는 항상 듣는 말이다. 심지어 프로그래밍 코드를 한번이라도 작성해 본 사람이라면, 에러 메시지에서 수도 없이 봤을 것이다. 먼저, 두 타임의 차이를 알아보기 전에 컴퓨터 코드는 어떤식으로 해석되는지 간단히 알아보자.
- 개발자는 소스코드로 프로그램을 작성한다. 확장자는 (.py, .java, .c, .cpp, .js)등등 여러가지가 있다.
- 소스코드를 컴파일 한다(C의 경우 gcc). 컴파일이라는 과정을 통해 소스코드를 기계어로 변역한다.
- 이처럼 소스코드를 기계어로 변환할때 발생하는 에러를 "컴파일 타임 에러("Compile time error")이라고 부른다.
- 컴파일오류가 발생하지 않고 컴파일이 완료 되었다면, 유저는 실행 가능한 파일을 가지고 프로그램을 실행 할 수 있다. 이때 발생하는 오류를 런타임("Runtime Error")이라고 부른다.
이렇게 '런타임'과 '컴파일타임'은 보통 오류를 나타낼때 가장 많이 사용한다. 그렇다면 컴파일 타임 오류와 런타임 오류의 예시는 어떠한 것들이 있을까?
- 런타임 오류
- 어떠한 수를 0으로 나누는 경우
- Null pointer exception
- 예를들면, 사용자가 10칸짜리 배열에 담긴 값들을 차례로(인덱스 0부터 9까지) 더해서 총 합을 구하려고 한다. 하지만 8번째 배열의 값은 'null'이다. 이 오류는 컴파일 당시에는 캐치되지 않고, 사용자가 반복문을 통해 8번째 인덱스를 참조하기 직전까지도 발생하지 않는다. 그러나 배열의 8번째 요소를 가져오려고 시도하면, 그때 이제 런타임 에러가 발생한다.
- 메모리 누수, 부족 오류
- 컴파일 타임 오류
- 타입체크 오류
- 예를 들면, 위처럼 어떠한 배열을 파라미터로 받는 int add(int[] arr)이라는 함수가 있다고 해 보자. 하지만 아래 코드에는 파라미터에 배열이 아닌 연결 리스트를 파라미터로 주면 에러가 발생한다.(타입 불일치)
- Syntax 오류
- 타입체크 오류
'CodingTest' 카테고리의 다른 글
[알고리즘] 중복된 문자 찾기 (1) | 2024.05.30 |
---|---|
[자료구조] 배열과 문자열 (0) | 2024.05.29 |
[알고리즘] 상한선(Upper bound), 하한선(Lower bound) (0) | 2024.03.30 |
1.Two Sum[Python] (0) | 2024.01.18 |