흔히들 컴퓨터 과학 수업을 듣거나, 프로그래밍을 하다 보면 위의 두 단어는 항상 듣는 말이다. 심지어 프로그래밍 코드를 한번이라도 작성해 본 사람이라면, 에러 메시지에서 수도 없이 봤을 것이다. 먼저, 두 타임의 차이를 알아보기 전에 컴퓨터 코드는 어떤식으로 해석되는지 간단히 알아보자.

 

  • 개발자는 소스코드로 프로그램을 작성한다. 확장자는 (.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

+ Recent posts