compiler와 interpreter

흑이·2022년 4월 4일
0

Low-level Language & High-level Language

우리와 컴퓨터의 의사소통 방식에 대해 이해하기 위해선 몇가지 개념에 대한 설명이 필요하다.

간단하게 저레벨 언어는 컴퓨터가 알아듣기 쉬운 언어이고, 고레벨 언어는 우리(개발자)가 알아듣기 쉬운 언어이다.



컴파일러와 인터프리터는 고급 언어(소스 코드)를 기계어로 바꿔주는 프로그램

컴퓨터 프로그램은 고급언어로 작성되는데, 이는 사람이 이해하기 위한 것이므로
이진수로 작성된 기계어만을 이해하는 컴퓨터는 이를 이해하지 못한다.
따라서, 고급언어로 작성된 소스 코드를 기계어로 바꾸기 위해 컴파일러와 인터프리터가 필요하다.



Compiler & Interpreter

<youtube 처음코딩>

Compiler

컴파일러는 우리가 작성한 고레벨 소스코드한번에 번역 한다.
'컴파일러'라는 번역가가(프로그램) 컴퓨터에게 건내줄 책을 미리 컴퓨터 언어로 번역 작업을 하는 것

C, C++, JAVA는 완성된 프로그램을 출시하는 단계에서 컴퓨터에게 일을 시킴
개발자가 작성한 프로그래밍 코드를 출시전에 번역 하는것이다.

때문에 빌드 과정프로그램을 실행시키기 위한 목적 파일을 만드는 과정을 하는데 비교적 시간이 걸리지만, 모든 고레벨 소스코드를 한번에 번역하기 때문에 최적화에 용이하다.



Interpreter

인터프리터는 소스코드를 해석하는 실행기

그때 그때 해석을 해놓으면 인터프리터다.

Javascript, Ruby, Python 는 그때 그때 통역사가 읽어주는 언어 이들을 인터프리터 언어라고 한다.(필요한 만큼만)

소프트웨어를 출시할 때 컴파일을 하는 과정이 필요 없기 때문에
코드 수정이 잦은 서비스의 경우 업데이트가 훨씬 수월하지만 그때 그때 통역사가 머리 굴리며 책을 읽어야 하기 때문에 실행 속도는 컴파일러 언어보다 느리다는 단점이 있다.

그리고 프로그래머가 짠 코드가 그대로 배포되어 사용되기 때문에 프로그래밍 코드가 보다 쉽게 노출된다.

이런 특성들을 고려해서, 개발자들은 자신이 만들려는 서비스에 적합한 종류의 언어를 선택해서 프로그래밍을 한다.


변화가 적은 환경 즉 특정 하드웨어를 구동시키는 프로그램에서는 컴파일 언어를 사용하는게 소프트웨어의 성능 측면에서 유리

만약 브라우저 같이 변화가 많은 환경에서는 인터프리팅 언어를 사용하는 것이 성능은 불리할지 몰라도 유지 및 보수에 유리할 것이다.



실행 과정

<youtube Tartaglia_타르탈리아 TV>

Compiler

소스파일 - 컴파일링 - 2진코드(실행파일) - cpu

Interpreter

소스파일 실행 - 해석기 실행(Interpreter) - 2진코드 - cpu



장점, 단점

Compiler

컴파일 과정이 오래 걸릴 수 있고, 메모리도 많이 차지하게 된다.
또한 코드 수정 시 컴파일 과정을 다시 진행해야 하기 때문에 개발 편의성이 떨어진다.
전송 시 실행 파일 전체를 보내야 하므로, 용량면에서도 비교적 클 수 밖에 없다.
하지만 컴파일 이후에는 최적화된 코드를 한번에 실행하기에 실행이 빠르고, 한번 변환한 코드는 더 이상 변환하지 않아도 되기에 효율적이다.
또한 코드가 변환되어 실행되므로, 보안면에서 비교적 월등하다.

Interpreter

소스 코드를 한 줄씩 읽어가며 실행하기에, 실행 시간이 비교적 느리다.
또한 코드의 변환 과정이 단순하여 보안면에서 비교적 불안하다.
하지만 코드 수정 시 즉시 실행 및 피드백이 가능하다.
또한 전송 시 코드만 보내도 되므로 용량면에서도 비교적 작다.



https://www.youtube.com/watch?v=GYmuQJiPeM4
https://www.youtube.com/watch?v=mzn9pRvWJWU
https://www.youtube.com/watch?v=ZPBTGk50Ixc
https://velog.io/@kich555/Compiler-Interpreter
https://velog.io/@losuif/Compiler-vs-Interpreter
https://velog.io/@tess/Compiler-vs-Interpreter

0개의 댓글