컴파일러와 인터프리터
컴파일러와 인터프리터 누구냐 너네들은??
우리가 프로그래밍 언어를 작성할 때는 보통 가독성이 좋은 고급 언어로 작성을 합니다. 이러한 고급 언어를 기계어로 번역시켜 주는 역할을 하는 것이 바로 컴파일러와 인터프리터입니다.
고급 언어: 사람의 언어와 가까운 언어 - C, C++, C#, Java, JavaScript 등등 (좋고 나쁘고의 의미 아님)
저급 언어: 기계의 언어(기계어)와 가까운 언어 - 어셈블리어 (역시나 좋고 나쁘고의 의미 아님)
기계어: 1과 0으로 이루어진 CPU가 해석할 수 있는 유일한 언어
어셈블리어: 기계어를 가독성 좋게 영어로 번역한 언어
자세한 설명 보러 가기
즉, 컴파일러와 인터프리터는 고급 언어를 기계어로 번역하는 번역기인 셈입니다.
제가 외국인과 소통할 때 사용하는 구글 번역기와 비슷한 존재인 것 같습니다.
아무튼 그렇다면 도대체 컴파일러와 인터프리터는 왜 필요한 걸 까요??
컴파일러와 인터프리터는 왜 필요한가??
우리는 가독성이 좋지 않은 기계어로 프로그래밍을 하게 된다면, 이 세상에 수많은 유용한 어플의 90% 이상은 개발이 안되지 않았을까 합니다. 여러분들은 0과 1로만 이루어진 기계어로 수백만 줄을 작성하며 어플을 만드실 수 있으신가요?? 만약 만들 수 있다고 하더라도 오랜 시간이 걸리기 때문에 만들더라도 엄청난 시간이 소요될 것입니다. 어찌어찌 만든다 해도 가독성이 정말 많이 떨어지기 때문에 유지 보수는 어떻게 할 수 있을까요. 생각만 해도 아찔합니다.
그렇기 때문에 기계어를 영어로 번역한 어셈블리어 그보다 더 가독성이 좋은 고급언어를 만들어서 프로그래밍을 하게 됩니다.
하지만!! 컴퓨터 즉, CPU는 한 가지의 언어만 할 줄 아는 친구입니다. 바로 그 언어가 기계어인 것이죠!!
그렇다면 사람이 쓰는 고급 언어와 CPU가 사용하는 기계어 사이를 통역해주는 친구가 필요하죠 그게 바로 컴파일러와 인터프리터 번연기입니다.
이렇게 고급언어를 기계어로 번역한다는 공통점을 갖고 있지만 두 번역기는 서로 다른 특징을 갖고 있습니다.
컴파일러
컴파일러는 미리 번역을 해놓는 꼼꼼한 MBTI ‘T’ 번역가라고 생각하면 좋습니다.
미리 번역을 해놓는 꼼꼼한 MBTI ‘T’ 번역가라고 생각하면 좋습니다.
컴파일러는 위에서 언급한 것처럼 고급언어를 기계어로 번역시켜주는 번역기이며, 흔히 알고 있는 언어 중에 C, C++, C# 등이 컴파일러 언어입니다.
컴파일러의 큰 특징 중 하나는 우리가 작성한 코드를 실행할 때, 소스코드 전체를 한 번에 번역한 후에 실행을 하며, 그렇기 때문에 실행 전에 에러가 검출되어 프로그램이 실행되지 않으며, 한번 번역을 하면 실행파일을 만들어 놓고 다음에 실행할 때 이전에 만들어 놓았던 실행파일을 실행합니다. 그렇기 때문에 한번 컴파일에 성공한다면, 다음에 해당 프로그램을 실행하게 되면 또다시 컴파일을 하지 않아 실행 속도는 인터프리터보다 상대적으로 빠릅니다.
인터프리터
인터프리터는 미리 번역을 하지 않고 즉시 번역을 하는 MBTI ‘P’ 번역가라고 생각하면 좋습니다.
인터프리터도 컴파일러와 같은 고급언어를 기계어로 번역시켜주는 번역기이며, 흔히 알고 있는 언어 중에는 Python, JavaScript 등이 있습니다. 인터프리터의 큰 특징 중 하나는 컴파일러와 다르게 인터프리터는 한 줄, 한 줄씩 읽으면서 번역을 하고 작업을 수행을 하기 때문에 번역 속도는 컴파일러보다 상대적으로 빠르지만, 실행 속도가 상대적으로 컴파일러보다 속도가 떨어지고 그렇기 때문에 프로그램을 실행시키고 나서 오류가 발견됩니다.
참고로 JavaScript는 인터프리터 언어이지만, 자바스크립트 엔진에 따라 내부에서 컴파일 과정을 거칩니다. 대표적으로 크롬의 V8 엔진이 이에 해당합니다.
한가지 더 인터프리터 언어가 실행시 한 번에 한 문장씩 번역해서 에러를 미리 방지를 못한다 했는데, 아래 참고사진을 봐주세요
위에 예시를 보면 script click1 함수에 재할당이 되지 않은 const에 재할당을 했고, 코드 편집기는 문제를 알리는 빨간줄 표시를 해줍니다.
하지만, 프로그램을 실행시키면 에러를 발생시키지 않습니다.
버튼1을 누르고 문제가 있던 함수 click1()이 실행되고 나서 에러가 발생하는 것을 볼 수 있습니다.
컴파일러와 인터프리터 정리
'컴퓨터 과학(CS) > 프로그래밍 언어' 카테고리의 다른 글
[컴퓨터 과학] 기계어, 어셈블리어, 고급 언어, 저급 언어 (용어 설명) (0) | 2022.08.02 |
---|