Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Git
- HashMap
- 스레드
- cpu
- ssd
- heap
- HDD
- Servlet
- 스케줄 삭제
- stack
- null
- netstat
- 멀티스레드
- maven
- url
- git push
- RAM
- queue
- MAP
- trunc(date)
- desc
- 프로세스 종료
- 오라클 버림 함수
- trunc()
- 이진탐색트리
- ArrayList
- 오라클 trunc()
- web
- 정렬
- trunc(sysdate)
Archives
- Today
- Total
無테고리 인생살이
[OS] 컴파일러 VS 인터프리터 본문
개발자는 일반적으로 high level language를 사용해서 컴퓨터 프로그래밍을 합니다. high-level language란 인간이 이해할 수 있는 인간친화적 언어이고, 이 고수준 언어로 작성된 코드를 소스코드(source code)라고 합니다.
기계는 high-level language로 작성된 소스코드를 읽을 수 없습니다. 즉, 컴퓨터 CPU는 0,1로 이루어진 바이너리 형태의 기계어(machine code)만 읽을 수 있습니다.
그러므로,
작성한 소스코드를 CPU가 이해할 수 있는 기계어로 바꿔줘야 합니다. 컴파일러와 인터프리터는 소스코드를 기계어로 변환해주는 언어변환 프로그램이라고 생각하면 이해가 쉬울 것입니다.
컴파일러와 인터프리터의 차이점을 여러 관점에서 살펴보겠습니다.
1. 실행 방식 (기계어로 변환되는 시점)
- 컴파일러는 프로그램 실행 전, 소스코드 전체를 기계어로 한 번에 변환 후, 실행
- 인터프리터는 런타임에 한 줄씩 소스코드를 기계어로 변환하면서 실행
2. 성능
- 컴파일러는 이미 컴파일 해놓은 object code를 실행만 하면 되므로, 인터프리터보다 실행 속도가 빠름
3. 메모리 효율성
- 컴파일러는 소스코드 전체를 object code로 변환해 저장하기 때문에, 인터프리터보다 더 많은 메모리 사용
4. 보안
- 컴파일러는 object code가 기계어로 된 실행 파일이 되므로, 보안이 상대적으로 우수
- 인터프리터는 소스코드 자체가 실행 파일이 되므로, 보안이 상대적으로 약함
5. 플랫폼 독립성 (이식성)
- 컴파일러는 컴퓨터의 CPU, OS에 맞는 기계어로 변환합니다. 다른 플랫폼에선 변환된 object code 실행 파일이 동작하지 않을 수 있으므로, 플랫폼에 종속적 (이식성 떨어짐)
- 인터프리터는 소스코드가 실행 파일이 되므로 CPU, OS의 영향을 받지 않아 플랫폼에 독립적 (이식성 뛰어남)
5. 디버깅 난이도
- 컴파일러는 소스코드를 완전히 스캔한 후에 에러를 발생시키므로, 디버깅이 상대적으로 어려움
- 인터프리터는 첫 에러가 발생한 지점에서 실행을 멈추기 떄문에, 디버깅이 상대적으로 쉬움
컴파일 언어: C, C++, Go
인터프리터 언어: Python, JavaScript, PHP, HTML
'OS' 카테고리의 다른 글
[OS] 프로세스 간 context switching (feat. process state, PCB) (0) | 2023.01.21 |
---|---|
[컴퓨터 구조] CPU Cache란 무엇인가 (0) | 2022.11.22 |
[컴퓨터 구조] HDD와 SSD의 차이점 (0) | 2022.11.22 |
[컴퓨터 구조] 메모리와 디스크를 비교하고, CPU와의 관계를 예를들어 이해하기 (0) | 2022.11.21 |
[컴퓨터 구조] CPU에 대해 간단히 알아보고(feat. core, thread, clock), 메인보드에서 떼낸 내 CPU 스펙을 살펴보자 (0) | 2022.11.10 |