런타임과 컴파일타임에 대해서 알고 있니?

런타임(Run-time)컴파일 타임(Compile-time)의 개념을 이해하는 것이 TypeScript와 JavaScript의 차이를 이해하는 데 중요한 요소입니다. 이 두 개념이 어떻게 작동하는지 명확하게 이해하면, 왜 TypeScript가 더 엄격한 타입 시스템을 제공하는지, JavaScript가 왜 동적 언어로 런타임 시에 오류를 감지하는지 알 수 있습니다.


1. 컴파일 타임(Compile-time)

  • 컴파일 타임은 코드가 실행되기 전에, 즉 프로그램이 빌드되는 과정에서 일어나는 단계입니다.
  • 컴파일러는 코드를 읽고, 그 코드가 올바른지 확인한 후 기계어로 번역하거나 다른 형태의 코드로 변환하는 역할을 합니다.
  • 이 단계에서 문법 오류타입 오류가 발생하면, 코드가 실행되기 전에 오류를 발견할 수 있습니다.

TypeScript의 컴파일 타임

  • TypeScript는 정적 타입 언어로, 코드를 컴파일할 때 타입 검사를 수행합니다. 즉, 코드가 실행되기 전에 타입 오류가 있는지 검사합니다.
  • TypeScript에서 컴파일 타임에 오류를 발견하면, 해당 오류를 수정하기 전에는 코드가 실행되지 않습니다.

예시:

let message: string = "Hello";
// 컴파일 타임에서 오류가 발생
message = 42; // Error: Type 'number' is not assignable to type 'string'

위 예시에서는 message 변수가 string 타입으로 선언되었지만, 나중에 number 타입의 값인 42를 할당하려고 했을 때 컴파일 타임에 오류가 발생합니다. 이 오류는 프로그램이 실행되기 전에 감지되므로, 런타임에서 문제가 발생하지 않습니다.

2. 런타임(Run-time)

  • 런타임은 프로그램이 실제로 실행되는 단계입니다. 즉, 사용자가 프로그램을 실행하고 나서 발생하는 모든 동작이 런타임 동안 발생합니다.
  • 런타임 오류는 프로그램이 실행되는 중에 발생하는 오류입니다. 예를 들어, 잘못된 사용자 입력, 네트워크 오류, 논리적인 실수로 인해 발생할 수 있습니다.
  • JavaScript는 동적 타입 언어이기 때문에, 런타임 동안에만 타입이 확인되고 오류가 발생합니다.



JavaScript의 런타임

  • JavaScript는 정적 타입 검사를 제공하지 않으므로, 변수에 어떤 값이든 할당할 수 있습니다. 오류가 발생하더라도 실제 코드가 실행될 때까지 알 수 없습니다.

예시:

let message = "Hello";
message = 42; // JavaScript에서는 오류 없음

console.log(message.length); // 런타임 오류 발생: 'message'가 숫자이므로 'length' 속성이 없음

이 코드에서는 message에 문자열 "Hello"가 할당된 후, 숫자 42가 다시 할당되었습니다. JavaScript에서는 이 시점에 오류가 발생하지 않습니다. 하지만 message.length를 호출하는 부분에서 런타임 오류가 발생합니다. 42는 숫자이므로 length 속성을 가지고 있지 않기 때문입니다. 이 오류는 코드가 실행될 때까지 감지되지 않습니다.



컴파일 타임과 런타임의 차이점

구분 컴파일 타임(Compile-time) 런타임(Run-time)
작동 시점 프로그램이 실행되기 전에, 코드가 번역되는 시점 프로그램이 실제로 실행되는 동안
오류 발견 시점 코드가 실행되기 전, 컴파일 과정에서 문법 및 타입 오류 감지 프로그램 실행 중, 잘못된 논리나 데이터로 인해 발생하는 오류 감지
TS 타입 오류는 컴파일 타임에 감지 (코드 실행 전 오류 발견 가능) 런타임 오류는 TypeScript에서도 실행 중에 발생 (외부 요인에 의한 오류)
JS 런타임에만 오류가 발생하고, 실행 전에는 오류를 미리 알 수 없음 대부분의 오류가 프로그램이 실행될 때만 발견됨



TypeScript와 JavaScript의 차이

  • TypeScript정적 타입 검사를 통해 컴파일 타임에 오류를 미리 찾아내므로, 런타임에 발생할 수 있는 잠재적인 오류를 방지하는 데 도움을 줍니다.
  • JavaScript동적 타입 언어로, 변수에 다양한 타입의 값을 자유롭게 할당할 수 있지만, 오류를 미리 찾아내기 어렵고, 주로 런타임에서 오류가 발생합니다.


정리

  • 컴파일 타임: 코드가 실행되기 전에, 오류를 미리 찾아내고 예방할 수 있는 단계입니다. TypeScript는 이 단계를 적극적으로 활용해 안정성을 높입니다.
  • 런타임: 프로그램이 실행 중일 때 발생하는 단계로, 모든 동적 오류가 이 단계에서 발견됩니다. JavaScript는 주로 런타임에 오류를 발견하므로, 개발자가 런타임 오류를 주의깊게 처리해야 합니다.

TypeScript는 컴파일 타임의 오류 방지 기능 덕분에 더 안전한 코드를 작성할 수 있게 도와주는 언어입니다. 반면, JavaScript는 동적인 특성 때문에 주로 런타임에 오류를 감지하게 되므로, 추가적인 테스트와 오류 처리가 중요합니다.

개발자 성현