인터프리터 언어와 컴파일을 비교하기 전에 고급언어와 저급언어를 공부해 보겠습니다.
보통 프로그래밍 언어의 종류를 나눌 때 고급 언어와 저급 언어로 구분합니다.
인터프리터 언어와 컴파일 언어는 고급언어에 속하며
C, C++, 자바 기타 언어는 저급언어에 속합니다.
고급 언어와 저급 언어를 나누는 기준은 "사람이 알아보기 쉬운지, 어려운지의 여부'를 기준으로 합니다. 사람이 잘 이해할 수 있고 친숙하면 '고급 언어', 컴퓨터가 이해하기 쉽고 가까운 언어이면 '저급 언어'로 분류합니다.
1. 저급 언어
저급 언어는 기계 중심의 언어로 컴퓨터가 이해하기 쉬운 2진법으로 이루어진 언어입니다. 컴퓨터가 바로 실행할 수 있어 실행 속도가 빠르지만 가독성 및 생산성이 낮습니다. 저급 언어의 종류에는 '기계어'와 '어셈블리어' 등이 있습니다.
- 기계어 : CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어를 통틀며 프로그램을 나타내는 가장 낮은 단계의 개념입니다. 그리고 기계어는 대부분 어셈블리어를 거쳐 짜입니다.
- 어셈블리어 : 기계어를 사람이 이해하기 쉬운 기호와 1:1로 매핑하여 기호화한 프로그램 언어입니다. 기계와 바로 통신이 가능해 빠르게 기계를 제어할 수 있습니다. 최소한의 명령으로 이루어진 언어로 2진수 패턴을 사용하는 기계어와 비슷해 명령을 내릴 때 세밀한 조정이 필요합니다.
2. 고급 언어
고급 언어는 일상적인 언어와 기호를 그대로 이용하는 사람 중심의 언어로, 하드웨어에 대한 지식이 없이도 프로그래밍을 작성할 수 있고, 생산성이 높습니다. 이 언어를 실행하기 위해서는 기계어로 번역하는 컴파일 과정이 필수적으로 필요합니다.
고급 언어는 실행하기 전에 기계가 이해할 수 있는 기계어로 번역하는 작업이 필요합니다. 마치 영어를 모르는 사람이 영어로 된 문서를 이해하려면 번역기를 이용해야 하는 것과 비슷합니다. '컴파일'은 컴퓨터와 사람 사이의 번역기라고 생각하면 됩니다.
고급 언어를 기계어로 번역해 주는 도구 또는 논리적인 장치를 '컴파일러'라고 하며, 고급 언어로 작성된 프로그램을 2진법(0,1)으로 이루어진 기계어로 바꾸어 줍니다.
그리고 '빌드'라는 것이 있는데, 단순히 소스코드를 기계어로 번역해주는 것을 컴파일이라고 한다면, 빌드는 고급 언어로 작성된 소스코드를 실행 가능한 파일로 만들어준다는 차이가 있습니다. 즉, 빌드 안에 컴파일이 포함된다고 생각하면 됩니다.
3. 인터프리터 언어 vs 컴파일 언어
고급 언어는 또 '인터프리터 언어'와 '컴파일 언어'로 나눌 수 있습니다. 둘 다 고급 언어를 기계가 이해할 수 있는 기계어로 해독해 주는 것은 동일합니다, 다만 차이는 컴퍼일 언어는 '컴파일 타입'을 사용하는 언어고, 인터프리터 언어는 '런타임'을 사용하는 언어라는 점입니다.
1) 컴파일러
원시 코드(프로그래머가 직접 작성한 소스코드)를 모두 기계어로 번역한 후 기계를 넣고 기계어 코드를 실행하는 것을 말합니다. 빌드 과정을 거치기 때문에 빌드 타임이 없는 인터프리터 언어보다 실행 직전까지의 속도는 조금 소요될 수 있습니다. 하지만 실행(런타임) 상황에서는 이미 기계어로 모든 소스코드가 번역되어 있기 때문에 빠르게 실행이 가능합니다.
대표적인 언어로 C, C++, 자바, C#, GO 등이 있습니다.
2) 인터프리터
인터프리터를 해석하면 '해석기'라는 뜻으로, 소스코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말합니다. 소스코드를 목적 코드(원시코드가 컴파일된 결과물)로 옮기는 컴파일과 가장 큰 차이점입니다. 인터프리터에서는 번역과 실행이 동시에 이루어지므로 별도의 실행파일이 존재하지 않으며 빌드 시간이 없다는 의미와 동일합니다.
대표적인 언어로 R, 파이썬, 루비, 펄, PHP, 자바스크립트 등이 있습니다.
오늘은 간단하게 컴파일 언어와 인터프리터 언어의 차이점에 대해 알아봤습니다.
고생 많으셨습니다. 감사합니다!
'IT의 모든 것 > IT 상식' 카테고리의 다른 글
메타버스와 융복합 시대의 시작!! (0) | 2023.03.19 |
---|---|
4차 산업혁명 시대의 변화 (0) | 2023.03.16 |
2023년 IT 트렌드는 무엇이 있을까? (0) | 2023.03.08 |
웹 사이트 프론트엔드와 백엔드의 차이는 무엇일까?? (0) | 2023.02.23 |
(개발) 인기 있는 프로그래밍 언어를 따라가야 하는가? (0) | 2023.02.23 |