cf. 기계어
(개념)
컴퓨터가 사용하는 0, 1로 이루어진 언어
(배경)
① 생산성, 기기간 호환성, 디버깅 등 많은 측면에서 비효율적
→ 추상화 된 고수준 언어 작성 및 번역기(컴파일러)로 번역하는 방식의 필요성 대두
② 0,1 패턴으로 이루어진 명령(Instruction)을 컴퓨터에게 전달하기 위해 인간이 이해 및 작성가능한 언어 등장.
→인터프리터 언어 . 컴파일 언어
③ 현재 다수 프로그램은 컴파일러를 통해 전체 소스코드를 기계어로 번역 후 작동
※ 인터프리터 언어(Interpreted Language)
(개념)
원시코드의 기계어 변환 과정 없이 작성된 코드 1줄 단위로 실행하는 언어
(특징)
① 인터프리터가 코드를 빌드과정 없이 한 줄씩 읽고 기계어 변환, 바로 실행하므로 빌드 시간 소요 x
→ Runtime 상황에서 중간 매개체인 인터프리터가 한 줄 씩 읽고 실행하므로 컴파일 언어에 비해 실행 속도 느림
→ 번역 결과 캐싱 또는 JIT 방식을 통해 실행 속도를 컴파일 언어 근접하게 따라잡았음.
② 프로그램 수정의 용이함.
→ 코드 변경 시, 빌드 과정없이 바로 실행 가능. 서버 재기동 필요 x
→ 컴파일러는 소스 수정 후, 재컴파일 후 수정된 실행 파일 생성 과정 추가
→ 수정이 빈번한 프로그램 용도는 인터프리터 언어 사용.
③ 크로스플랫폼
④ 문법 오류는 패스하고 진행하므로 디버깅에 유리.
→ 문법 오류가 포함된 버전 출시 가능성 ↑
⑤ 대화식 프로그래밍 가능
※ 인터프리터
(개념)
코드를 한줄 씩 기계어로 번역하는 방식의 기계어 번역 프로그램
→ Like , 통역기
※ 컴파일 언어(Complied Language)
(개념)
원시코드에서 컴파일되는 언어.
기계어로 구성된 목적 프로그램(실행 파일) 생성 후 가상머신(ex. JVM) 등을 통해 실행.
(특징)
① 원시코드를 기계어로 번역하는 빌드 과정 소요.
→ 작성된 소스코드 (ex .cpp 또는 .java) 파일에서 컴파일러를 통해 (ex .exe 또는 .class) 실행파일 생성
→ Runtime 상황에서 전체 소스코드가 기계어로 변환된 상태이므로 빠른 실행 가능
② 코드 변경 시, 빌드 과정으로 인한 시간 소요
→ 수정이 빈번한 부분은 인터프리터 언어로 따로 작성할 필요성
③ 각 컴퓨터별 프로세스 및 운영체제 종속적
→ 컴파일 코드는 플랫폼 종속적
④ 코드상 문법 오류 발생 시, 컴파일러는 컴파일 거부
→ 오류 발견 시간이 빠름.
※ 컴파일러
(개념)
특정 언어 A로 쓰여진 소스 파일을 다른 언어 B로 변환해주는 프로그램
타 프로그램이나 하드웨어가 처리하기 용이한 언어로 변환한 목적 코드(목적 프로그램) 생성.
→ Like, 번역기
(특징)
컴파일 작업 결과물(목적 코드) + 라이브러리화 → 종합된 총 결과물을 '링커' 프로그램이 '링킹' 실행함.
※ 빌드(Build)
(개념)
소스코드 파일을 실행파일로 생성하는 과정.
= 고급어→ (변환) → 저급어 변환을 통한 실행 파일 생성.
(특징)
① 인터프리터 언어는 빌드 과정 없이 인터프리터가 고급언어에서 한 줄 씩 읽고 명령 수행.
② 컴파일 언어는 빌드 과정을 통해 실행파일(ex. .class) 생성 후 실행.
참고링크
https://brownbears.tistory.com/55