배경설명
코드를 작성하는 이유는 결국 그 코드를 실행했을 때 컴퓨터가 코드에 쓰인대로 행동하도록 하기 위해서겠죠!
하지만 컴퓨터의 뇌인 CPU는 사람이 사용하는 개발언어(C, C++, Java, Python 등)를 이해할 수 없습니다. CPU는 결국 몇백억개의 반도체로 이루어져있고, 하나의 반도체는 전기가 흐르고 안흐르고에 따라 1과 0만을 인식하고 나타낼 수 있기 때문이죠.
그렇다고 사람이 1과 0만으로 코드를 짠다면..
어떤 로직을 가진 코드인지 아시겠나요?? 사람은 한눈에 이해를 못하겠지만 CPU는 이렇게 쓰인 코드만 이해할 수 있습니다. 이 처럼 서로 이해하지 못하는 다른 언어를 쓴다면 번역이 필요하겠죠.
따라서 사람이 쓰는 개발언어(C, C++, Java, Python 등)를 기계어(010110...)로 번역을 해주는것이 바로 컴파일러(Compiler)와 인터프리터(Interpreter) 입니다. 이 두가지는 목적은 같지만 기계어로 번역되기까지 작동하는방식과 개발 언어의 특성에 따라 차이점이 있습니다.
컴파일러 (Compiler)
Compile 이라는 단어는 "무언가를 모아서 묶음으로 만든다" 라는 뜻을 갖고 있습니다. 유튜브에서도 해외 유튜버들이 여러 영상을 모아서 만든 영상에 "ㅁㅁㅁ Compilation" 이라는 제목을 많이 쓰죠.
컴파일러(Comiler)는 단어의 뜻과 비슷하게 프로그램 전체를 스캔하여 이를 모두 기계어로 한번에 번역합니다. 여기에는 장단점에 있습니다.
단점:
- 프로그램을 실행하는데 필요한 모든 파일을 스캔하기 때문에 초기 스캔시간이 오래걸립니다.
- 컴파일러는 기계어로 번역시 오브젝트 코드(Object Code)라는 파일을 만드는데 이 오브젝트 코드를 다시 묶어서 하나의 실행 파일로 다시 만드는 링킹(Linking) 작업을 해야합니다. 따라서 통상적으로 인터프리터 보다 메모리를 많이 사용합니다.
장점:
- 초기 스캔은 오래걸리지만, 한번 스캔을 마치면 실행파일을 만들어 놓고 계속 사용하기 때문에 실행속도는 인터프리터보다 빠릅니다.
- 컴파일러는 오류 메시지를 생성할때 전체 코드를 검사한 후에 오류 메시지를 생성합니다. 그래서 프로그램 실행 전에 오류를 발견 할 수 있습니다.
컴파일러(Comiler)를 사용하는 대표적인 언어에는 C, C++, C#, CLEO, COBOL 등 이 있습니다.
이렇게 컴파일러를 사용하여 실행하는 언어를 컴파일러형 언어(Compiled Language) 라고 합니다.
인터프리터 (Intepreter)
Interpret 라는 단어는 "해석하다"라는 뜻으로 일상생활에서 굉장히 자주 쓰입니다! 그래서 Interpreter 는 "통역사"라는 뜻도 가지고 있죠.
이름에 걸맞게 인터프리터는 프로그램 실행시 한 번에 한 문장씩만 기계어로 번역합니다. 이 또한 장단점이 존재하는데요.
단점:
- 컴파일러와 다르게 한번에 한 문장씩 읽고 번역하여 실행시키는 과정을 반복하다보니 실행이 조금 더 느립니다.
- 한번에 한 문장씩 읽기때문에 프로그램을 실행해봐야지만 오류 발견이 가능합니다.
장점:
- 컴파일러처럼 목적코드를 만들지도 않고, 링킹 과정도 거치지 않기 때문에 메모리 효율이 좋습니다.
- 코드 변경시 빌드 과정없이 바로 실행이 가능합니다. 따라서 개발 속도에 장점이 있습니다.
인터프리터(Interpreter)를 사용하는 대표적인 언어에는 Python, R, Ruby 가 있습니다.
이렇게 인터프리터로 실행되는 언어를 해석형 언어(Interpreted Language) 라고 합니다.
정리
출처:
- Compiled vs. Interpreted Programming Languages
- 인터프리터 언어와 컴파일 언어의 차이
- 컴파일 언어와 인터프리터 언어 설명
- 컴파일러(compiler)와 인터프리터(interpreter)의 차이
'Programming' 카테고리의 다른 글
[k8s] 쿠버네티스(kubernates, k8s)란? (0) | 2022.10.31 |
---|---|
[기술] 가상화(Virtualization)란? (0) | 2022.10.30 |
[Docker] 도커(Docker)란? 도커의 역사 (0) | 2022.10.30 |
[보안] CORS 란? CORS 에러란? (0) | 2022.10.11 |
[보안] OAuth란? (OAuth1.0, OAuth2.0) (0) | 2022.10.11 |