컴파일언어와 인터프리터언어의 차이

Posted by negabaro kim on Sunday, June 14, 2020 Tags: software   2 minute read

프로그래밍 언어

모든 프로그래밍 언어는 컴퓨터에게 어떤 명령을 내리기 위해 존재한다. 한편 프로그래밍 언어는 시대흐름에 따라 점점 진화해서 인간에게 친화적으로 바뀌어갔다. 이렇게 인간 친화적인 언어를 하이레벨 언어라고 부른다.

이 하이레벨 언어를 컴퓨터가 알아먹는 기계어로 바꿔주는 작업이 필요하다. 이 작업을 언제하냐에 따라 인터프리터,컴파일 언어로 나누어진다.

용어정리

번역

여기서 부터 하이레벨 언어를 기계어로 바꿔주는 작업을 「번역」이라고 부르겠다.

실행

또한 메모리에 적재된 기계어를 컴퓨터가 읽어내고 어떠한 output을 내는 행위를 「실행」이라고 부르도록 하자.

컴파일 언어란?

실행 이전에 번역이라는 작업을 하는 언어를 컴파일 언어라고 부른다. 하이레벨 언어를 번역번역된 코드를 실행하는 2개의 액션이 존재한다.

인터프리터 언어란?

번역실행을 순차적으로 동작 시키는 언어를 인터프리터 언어라고 부른다. 번역실행이 거의 동시에 실행되므로 1개의 액션이 존재한다.

컴파일언어의 장점

속도면

컴파일한 운영체제의 사양에 최적화되어 실행되므로 퍼포먼스가 뛰어나다.

버그 발견이 용이

간단한 미스가 컴파일시 발견되기 쉬움

컴파일언어의 단점

실행환경의 제약

컴파일시 지정된 운영체제에 최적화 되게 움직이게끔 만들어져 있어서 다른 운영체제에 실행하도록 하기 위해서는 재컴파일 할 필요가 있음.

코딩시간이 비효율적

하이레벨 언어 코드 일부가 바뀌어도 전체 코드를 컴파일할 필요가 있어 잦은 수정시 비효율적이다.

인터프리터 언어의 장점

코딩시간이 효율적

컴파일 언어에 비해 잦은 수정이 발생해도 매번 컴파일 할 필요가 없다는것이 장점

인터프리터 언어의 단점

속도면

번역과,실행을 하나의 액션에서 실행하므로 약간의 처리능력이 필요함

실행하기전에 버그를 발견할 수 없음

간단한 에러도 실행해보지 않으면 에러를 알 수 없음.

대표적인 컴파일 언어

C,C++,JAVA,Erlang, Haskell, Rust, and Go

대표적인 인터프린터 언어

javascript,Ruby,Python,PHP

메모1.

컴파일 언어는 대게 정적타입을 가지지만 동적타입을 지원하는 언어도 있다. 인터프리터 언어는 대게 동적타입만을 지원하지만 정적타입도 대응하는 추세이다.

메모2. JIT

잦은 수정시 전체 하이레벨 코드를 기계어로 컴파일링 하는 단점을 상쇄시키는 목적으로 등장 컴파일언어와 인터프리터의 중간 하이브리드 언어라고 불리우기도

컴파일시 컴퓨터에서 실행될 기계어가 아닌 bytecode로 변환하고 실행될때 기계어로 번역

같은 코드를 매번 해석하지 않고 실행할때 컴파일을 하면서 해당 코드를 캐싱하고 바뀐 부분만 새로 컴파일 하고 나머지는 캐싱한 코드를 사용

메모3. 트랜스파일

특정 언어로 된 코드를 다른 언어로 바꾸는 것을 말함. 기계어로 바꾸는 컴파일러와 차이가 있음.

대표적인 예로 Typescript가 있다.

reference:

https://m.blog.naver.com/PostView.nhn?blogId=parkjy76&logNo=220199093415&proxyReferer=https:%2F%2Fwww.google.com%2F