QueenCards / ProjectAnalysis

플젝뿌셔
1 stars 0 forks source link

[20] 런타임과 컴파일타임에 대해서 설명해주세요 #23

Closed hyeyoonS closed 1 month ago

hyeyoonS commented 2 months ago

📎 질문

런타임과 컴파일타임에 대해서 설명해주세요

✏ 구술 답변 키워드

✏ 서술 답변

런타임과 컴파일 타임

컴파일(Compile)이란?

일반적인 컴파일 과정

Untitled

컴파일러

인터프리터

JIT 컴파일러

Object Code

코드 종류

hotspot

Compiler vs InterPreter

JavaScript는 인터프리터 언어이다.

Untitled (1)

소스코드에서 바이트 코드로

Untitled (2)

JavaScript 엔진은 JIT 컴파일 방식을 사용한다.

런타임이란?

런타임 환경?

컴파일 에러와 런타임 에러

[컴파일 에러] 컴파일 에러는 프로그램이 컴파일링되는 과정에서 발생하는 에러입니다.

[런타임 에러] 소스코드가 이미 실행가능한 프로그램으로 성공적으로 컴파일이 되었더라도 여전히 프로그램의 실행중에 버그를 일으킬 수 있습니다. 이렇게 프로그램의 실행중에 발생하는 형태의 오류를 런타임 에러라고 한다.

0 나누기 오류 Null 참조 오류 메모리 부족 오류

3. 타입스크립트 컴파일

추상화 단계가 다른 고수준 언어가 저수준 언어로 변환되는 과정을 말합니다.

타입스크립트는 tsc라고 불리는 컴파일러를 통해 자바스크립트 코드로 변환됩니다. 하지만 타입스크립트는 고수준 언어(타입스크립트) ⇒ 고수준 언어(자바스크립트)로 변환되는 것이기 때문에 컴파일이 아니라 트랜스파일이라고 부르기도 합니다. 또한 이 과정은 소스코드를 또다른 소스코드로 변환하는 것이므로 소스 대 소스 컴파일러 라고 지칭하기도 합니다. 트랜스파일의 대표적인 예시로는 자바스크립트 ES6이상의 문법을 ES5이하의 문법으로 변환하는 바벨을 들 수 있습니다. 타입스크립트는 . ts확장자가 붙은 파일을 찾아내서 컴파일 한 다음 ⇒ .js 확장자가 붙은 자바스크립트 파일을 만들어냅니다. 타입스크립트 컴파일러는 소스코드를 해석해서 AST(최소 구문 트리)를 만들고 이후 타입 확인을 거친 다음에 결과 코드를 생성합니다.

💡 AST (Abstract Syntax Tree)

컴파일러가 소스 코드를 해석하는 과정에서 생성된 데이터 구조 컴파일러는 어휘적 분석(Lexical analysis)과 구문 분석(Syntax analysis)을 통해 소스코드를 노드 단위의 트리 구조로 구성합니다.

참고자료

[https://velog.io/@wish/JavaScript는-어떻게-컴파일될까](https://velog.io/@wish/JavaScript%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%90%A0%EA%B9%8C)

[https://prefer2.tistory.com/entry/Javascript-자바스크립트-엔진-자바스크립트-런타임](https://prefer2.tistory.com/entry/Javascript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%97%94%EC%A7%84-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%9F%B0%ED%83%80%EC%9E%84)

olseul commented 1 month ago

컴파일타임 (Compile-time) 컴파일타임은 소스 코드가 기계어로 변환되는 동안의 시기를 의미합니다. 이 과정은 일반적으로 컴파일러에 의해 수행됩니다. 컴파일타임 동안에는 다음과 같은 작업이 이루어집니다:

구문 분석(Syntax Checking): 소스 코드가 문법적으로 올바른지 확인합니다. 문법 오류가 있는 경우, 컴파일러는 오류 메시지를 출력합니다. 타입 체크(Type Checking): 변수와 함수의 데이터 타입이 올바르게 사용되었는지 검사합니다. 예를 들어, 정수 변수에 문자열을 할당하려고 하면 컴파일 오류가 발생합니다. 코드 최적화(Code Optimization): 컴파일러는 코드를 최적화하여 실행 속도를 높이고 메모리 사용을 줄입니다. 코드 생성(Code Generation): 최종적으로 소스 코드가 기계어 또는 중간 코드로 변환됩니다. 기계어는 CPU가 직접 실행할 수 있는 명령어이고, 중간 코드는 JIT 컴파일러에 의해 런타임에 기계어로 변환될 수 있습니다. 컴파일타임 예시

int main() { int a = 5; int b = "hello"; // 컴파일 오류: 타입 불일치 return 0; } 위의 C++ 코드에서 int b = "hello";는 컴파일타임 오류를 발생시킵니다. 문자열을 정수 변수에 할당하려고 했기 때문입니다.

런타임 (Runtime) 런타임은 프로그램이 실행되는 동안의 시기를 의미합니다. 런타임 동안에는 다음과 같은 작업이 이루어집니다:

메모리 할당(Memory Allocation): 프로그램이 실행되면서 필요한 메모리를 할당합니다. 예를 들어, 객체 생성 시 힙 메모리에 공간이 할당됩니다. 동적 타입 검사(Dynamic Type Checking): 일부 언어에서는 실행 시간에 타입 검사가 이루어질 수 있습니다. 예를 들어, 자바스크립트에서는 변수의 타입이 런타임에 결정됩니다. 예외 처리(Exception Handling): 실행 중에 발생하는 예외를 처리합니다. 예를 들어, 파일을 열 때 파일이 존재하지 않으면 런타임 오류가 발생할 수 있습니다. JIT 컴파일(Just-In-Time Compilation): 일부 언어에서는 런타임에 코드를 컴파일합니다. 예를 들어, 자바와 같은 언어는 바이트코드를 JIT 컴파일러를 통해 기계어로 변환합니다. 런타임 예시

public class Main { public static void main(String[] args) { int[] arr = new int[5]; System.out.println(arr[10]); // 런타임 오류: 배열 인덱스 초과 } } 위의 자바 코드에서 arr[10]은 배열의 범위를 초과하여 런타임 오류(ArrayIndexOutOfBoundsException)를 발생시킵니다.

hyeyoonS commented 1 month ago

자바스크립트의 런타임과 타입스크립트의 컴파일

1. 런타임과 컴파일타임

🤔컴파일타임이 뭐지?

개발자가 작성한 소스코드가 컴파일 과정을 거쳐 컴퓨터가 인식할 수 있는 기계어 코드(바이트코드)로 변환되어 실행할 수 있는 프로그램이 되는 과정

🤔런타임이 뭐지?

컴파일 과정을 마친 응용 프로그램이 메모리에 적재되어, 사용자에 의해 실행되는 과정


2. 자바스크립트 런타임

자바스크립트가 실행되는 환경을 의미합니다.

크롬, 사파리와 같은 인터넷 브라우저Node.js 등이 있습니다.

자바스크립트 런타임의 주요 구성 요소 : 자바스크립트 엔진, 웹API, 콜백 큐, 이벤트 루프, 렌더 큐


3. 타입스크립트 컴파일

추상화 단계가 다른 고수준 언어가 저수준 언어로 변환되는 과정을 말합니다.

타입스크립트는 . ts확장자가 붙은 파일을 찾아내서 컴파일 한 다음 ⇒ .js 확장자가 붙은 자바스크립트 파일을 만들어냅니다. 타입스크립트 컴파일러는 소스코드를 해석해서 AST(최소 구문 트리)를 만들고 이후 타입 확인을 거친 다음에 결과 코드를 생성합니다.

💡 AST (Abstract Syntax Tree)

  • 컴파일러가 소스 코드를 해석하는 과정에서 생성된 데이터 구조
  • 컴파일러는 어휘적 분석(Lexical analysis)과 구문 분석(Syntax analysis)을 통해 소스코드를 노드 단위의 트리 구조로 구성합니다.
HaydenDevK commented 1 month ago

컴파일타임

Jyophie commented 1 month ago

컴파일 타임 (Compile Time)

컴파일 타임은 소스 코드를 실행 가능한 프로그램으로 변환하는 과정이 이루어지는 시간입니다. 이 과정에서는 코드가 컴파일러에 의해 번역되어 기계어 또는 중간 언어로 변환됩니다. 컴파일 타임에는 다음과 같은 작업이 수행됩니다:

런타임 (Run Time)

런타임은 프로그램이 실제로 실행되는 시간을 의미합니다. 이 시점에서 컴파일된 프로그램이 메모리에 로드되고, CPU에 의해 실행됩니다. 런타임에는 다음과 같은 작업이 수행됩니다:

wise-Ag commented 1 month ago

사람이 프로그램을 위해 작성한 소스코드를 기계가 이해할 수 있는 기계어로 변환하는 과정을 컴파일이라고 합니다. 런타임이란 프로그램이 실행되는 환경이나 동작되는 동안의 시간을 말합니다.

컴파일러 언어와 인터프리터 언어

컴파일 과정 수행 여부에 따라 컴파일러 언어와 인터프리터 언어로 구분됩니다. 컴파일러 언어 : C, C++, C#, JAVA 컴파일 단계와 실행 단계가 분리되어 있어 컴파일 한 후 생성된 실행파일을 실행합니다. 인터프리터 언어에 비해 코드 실행 속도가 빠릅니다. 다만, 코드 수정이 있을 때마다 다시 컴파일(re-compile) 해야하는 번거로움이 있습니다.

인터프리터 언어 :  Python, JavaScript, Ruby 컴파일 과정 없이 소스코드를 한 줄 한 줄 읽고 바이트 코드로 변환하여 바로 수행합니다. 컴파일 자체에 소요하는 시간이 없고 코드 수정 시 재컴파일의 번거로움이 없습니다. 실행파일이 생성되지 않기 때문에 매 실행시마다 코드를 해석하는 인터프리트 과정이 반복되어 컴파일러 언어에 비해 수행 속도가 느립니다.

컴파일 에러와 런타임 에러

컴파일 에러는 프로그램이 컴파일링되는 과정에서 발생하는 에러입니다.

소스코드가 이미 실행가능한 프로그램으로 성공적으로 컴파일이 되었더라도 여전히 프로그램의 실행중에 버그를 일으킬 수 있습니다. 이렇게 프로그램의 실행중에 발생하는 형태의 오류를 런타임 에러라고 한다.

Eugene-A-01 commented 1 month ago

컴파일이란

컴파일 타임이란, 넓은 의미의 컴파일이 실행되는 과정. 즉 고차원 프로그래밍 언어로 작성된 소스코드가 0과 1로 이루어진 기계어로 변환되는 과정이다. 컴파일타임에 발생할 수 있는 오류는 타입오류나 문법적 오류, 파일 참조 오류 같이 기계어로 변환을 불가능하게 하는 상황 때문에 발생한다.

런타임이란, 이렇게 컴파일을 마쳐 기계어로 변환된 프로그램이 메인메모리 위에 적재되고 CPU 할당을 받아 프로세스가 실행되고 있는 과정이다. 런타임 오류는 0으로 나누게 되거나 null을 참조하게 되거나 메모리가 부족해지는 등 프로그램이 실행 중에 마주하는 예상치 못한 예외상황 또는 충돌로 발생한다.