컴파일타임
- 개발자가 소스코드를 작성하고 컴파일 과정을 거쳐 실행 가능한 프로그램이 되는 편집과정
- 소스코드 -> 컴파일 -> 기계어 변환 => 실행가능한 프로그램
- 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 |