공부 기록/개념정리

런타임 vs 컴파일 타임 / 컴파일러 vs 인터프리터

코딩걈자 2024. 3. 28. 15:37

컴파일타임

  • 개발자가 소스코드를 작성하고 컴파일 과정을 거쳐 실행 가능한 프로그램이 되는 편집과정
  • 소스코드 -> 컴파일 -> 기계어 변환 => 실행가능한 프로그램
  • Java, C 등의 컴파일 언어는 컴파일 과정이 필요함
    • Java->컴파일->Java 바이트 코드 -> JVM => 기계어
  • 스크립트 언어(Js, Py 등)은 컴파일 과정이 없이 번역과 즉시 동작됨

컴파일 타임 에러

  • 보통 문법적인 문제로, 문제되는 소스코드를 표시함
  • syntax에러
  • 타입체크 에러

 

런타임

  • 컴파일을 마치고 사용자에 의해 실행되어 질 때, 응용프로그램이 동작되는 때(time)을 뜻함
  • 런타임 환경 : 런타임이 일어나기 위해 (시스템 자원을 사용하기 위해) 엑세스 할 수 있도록 해주는 실행 환경
  • Javascript가 브라우저에서 실행되면 런타임은 Brower, nodejs에서 실행되면 런타임은 nodejs가 됨

런타임 에러

  • 컴파일에서는 문제가 없었지만 예외가 발생하는 등의 에러 , exception처리 필요
  • 0 나누기 
  • null참조
  • 메모리 부족

개발자가 작성한 고급언어는 컴퓨터가 인식할 수 없기 때문에 기계어로 번역해야함 => 번역 방식 2가지 : 컴파일러 방식 , 인터프리터 방식이 있음

컴파일러(Compiler)

  • 전체 파일을 스캔하여 한번에 기계어로 번역
  • 초기 스캔 시간이 걸리지만 실행파일을 만들고 실행하기 때문에 전체 실행시간은 빠름
  • 기계어로 번역하고 이 과정에서 오브젝트 코드파일을 생성 => 이 코드를 묶어서 '링킹' 작업을 통해 하나의 실행파일 생성
  • 더 많은 메모리를 사용
  • 실행 전 오류 파악 가능
  • 실행파일을 생성하기 때문에 보안적으로 소스코드가 직접 외부에 노출x 
  • C, C++, Java
  • 과정
    • 소스코드 읽기 -> 토큰으로 분해(분류) -> 토큰을 구조화하여 추상 구문 트리 생성 -> 의미 분석(타입 검사, 유효성 검사 등 오류가 발견되면 중단) -> 중간표현으로 변환(소스코드와 기계어 사이) -> 최적화 -> 기계어 생성 -> 링킹
    • 링킹 : 기계어로 변환된 코드에 필요한 외부 라이브러리, 함수, 모듈 등을 연결

인터프리터(Interpreter)

  • 프로그램 실행 시, 한문장씩 번역
  • 컴파일러 방식보다 실행시간이 더 걸리지만, 메모리 효율이 좋음
  • 실행 후에 오류 파악 가능=> 한 문장씩 번역될 때 오류를 만나면 프로그램 중지
  • 수정이 많을 경우 유리, 디버깅 기능 제공
  • Python, Ruby, Javascript
  • 과정
    • 소스코드 읽기-> 추상 구문 트리-> 의미 분석-> 실행

 

반응형

'공부 기록 > 개념정리' 카테고리의 다른 글

인코딩 vs 디코딩 , 직렬화(serialization)  (0) 2024.04.07
JVM (자바 가상 머신)  (0) 2024.03.30
OOP (객체지향프로그래밍)  (0) 2024.03.28
[네트워크] HTTP  (0) 2024.03.17
클라우드(Cloud)  (0) 2024.03.10