인터프리트: 두 판 사이의 차이
편집 요약 없음 |
편집 요약 없음 |
||
(같은 사용자의 중간 판 3개는 보이지 않습니다) | |||
3번째 줄: | 3번째 줄: | ||
고급언어로 만든 컴퓨터 프로그램을 실행시킬 때, 실행할 때마다 한 줄 한 줄 [[기계어]]로 번역해가면서 실행시키는 방식을 뜻하며, 한번에 전체 프로그램을 [[기계어]]로 번역한 다음 실행하는 [[컴파일]]과 대조되는 개념이다. 인터프리트 방식으로 프로그램을 실행할 수 있도록 해 주는 프로그램을 인터프리터(interpreter)라고 부른다. 인터프리트는 원래 '통역'을 뜻한다. 사람이 대화를 할 때 옆에 있다가 한 문장씩 통역해 주는 것과 비슷한 개념이라 할 수 있다. [[컴파일]]은 연설문 전체를 미리 번역했다가 줄줄이 읽어주는 것에 비교할 수 있다. | 고급언어로 만든 컴퓨터 프로그램을 실행시킬 때, 실행할 때마다 한 줄 한 줄 [[기계어]]로 번역해가면서 실행시키는 방식을 뜻하며, 한번에 전체 프로그램을 [[기계어]]로 번역한 다음 실행하는 [[컴파일]]과 대조되는 개념이다. 인터프리트 방식으로 프로그램을 실행할 수 있도록 해 주는 프로그램을 인터프리터(interpreter)라고 부른다. 인터프리트는 원래 '통역'을 뜻한다. 사람이 대화를 할 때 옆에 있다가 한 문장씩 통역해 주는 것과 비슷한 개념이라 할 수 있다. [[컴파일]]은 연설문 전체를 미리 번역했다가 줄줄이 읽어주는 것에 비교할 수 있다. | ||
인터프리트의 장점은 바로 실행할 수 있다는 데에 있다. [[컴파일]]은 프로그램 전체를 [[기계어]]로 번역하는 과정에서 시간이 걸리지만 인터프리트는 바로 실행에 들어갈 수 있다. 또한 [[컴파일]] 방식은 프로그램의 어느 | 인터프리트의 장점은 바로 실행할 수 있다는 데에 있다. [[컴파일]]은 프로그램 전체를 [[기계어]]로 번역하는 과정에서 시간이 걸리지만 인터프리트는 바로 실행에 들어갈 수 있다. 또한 [[컴파일]] 방식은 프로그램의 어느 한 곳이라도 바뀌었다면 전체를 다시 [[컴파일]]을 해야 하지만<ref>개발 과정에서는 증분 컴파일(incremental compile), 즉 바뀐 부분만 추가로 컴파일해서 붙이는 방법으로 시간을 절약하는 기법이 있지만 증분 컴파일을 하면 할수록 실행 파일의 덩치가 커지고 실행 효율도 떨어지기 때문에 제품 수준의 실행 파일을 만들려면 전체 재컴파일을 해야 한다.</ref> 인터프리트는 그냥 다시 실행하거나, 만약 실행 지점이 바뀐 부분까지 다다르지 않았다면 다시 실행할 필요도 없다. 유연성이라는 면에서는 인터프리터가 유리하다. | ||
단점은 속도. 연설문을 미리 번역해 놨다가 줄줄이 읽는 것과, 연설을 할 때 옆에서 동시통역을 할 때를 비교하면 쉽게 이해할 수 있다. 또한 [[컴파일]]은 실행하기 전에 컴파일 과정에서 어느 정도 오류를 잡아낼 수 있지만<ref>모든 오류를 잡아낼 수는 없다. 프로그램 언어의 규칙에 어긋나는 것은 잡아내지만 논리적인 | 단점은 속도. 연설문을 미리 번역해 놨다가 줄줄이 읽는 것과, 연설을 할 때 옆에서 동시통역을 할 때를 비교하면 속도 차이를 쉽게 이해할 수 있다. [[컴파일]]은 그 과정에서 코드를 최적화 하기 위한 다양한 시도를 하지만 인터프리트는 한 줄 한 줄씩 바로바로 실행시켜야 하므로 최적화가 어렵다. 연설문을 미리 번역할 때에는 문장을 다듬고 고치면서 간결하게 만들 수 있지만 동시통역은 바로바로 통역을 해 줘야 하므로 간결성이 떨어지는 것과 비슷하다. 또한 [[컴파일]]은 실행하기 전에 컴파일 과정에서 어느 정도 오류를 잡아낼 수 있지만<ref>모든 오류를 잡아낼 수는 없다. 프로그램 언어의 규칙에 어긋나는 것은 잡아내지만 논리적인 문제, 혹은 컴파일 때 값이 확정되지 않은 변수 때문에 생기는 오류와 같은 건 [[컴파일]] 과정에서 잡기 힘들다.</ref> 인터프리트 방식은 일단 실행해 봐야 알 수 있다. | ||
인터프리트와 [[컴파일]]을 절충하는 방식도 있는데, 예를 들어 [[컴파일]] 방식의 언어를 [[디버그]]할 때에는 한 줄 한 줄 실행해가면서 결과를 추적하는 기능이 있다. 이는 컴파일을 하면서 기계어 파일 안에 디버그 정보를 심어 놓는 방식으로 역추적이 가능하도록 한 것이다. 다만 이렇게 컴파일을 하면 실행 파일에 디버그 정보가 들어가므로 파일 크기가 커지고 실행 속도도 느려진다. | 인터프리트와 [[컴파일]]을 절충하는 방식도 있는데, 예를 들어 [[컴파일]] 방식의 언어를 [[디버그]]할 때에는 한 줄 한 줄 실행해가면서 결과를 추적하는 기능이 있다. 이는 컴파일을 하면서 기계어 파일 안에 디버그 정보를 심어 놓는 방식으로 역추적이 가능하도록 한 것이다. 다만 이렇게 컴파일을 하면 실행 파일에 디버그 정보가 들어가므로 파일 크기가 커지고 실행 속도도 느려진다. [[JIT 컴파일]]도 사용 폭이 확대되고 있는데, 코드를 처음 실행할 때 [[컴파일]]을 해서 속도를 높인다. [[자바스크립트]]의 속도가 비약적으로 빨라진 것도 웹 브라우저 제작사들이 경쟁적으로 [[JIT 컴파일]]을 도입하고 성능을 향상시키고 있기 때문이다. 단, 처음 실행시킬 때에는 [[컴파일]]을 기다려야 하므로 실행 속도가 느리다. | ||
{{각주}} | {{각주}} |
2021년 10월 29일 (금) 13:29 기준 최신판
Interpret.
고급언어로 만든 컴퓨터 프로그램을 실행시킬 때, 실행할 때마다 한 줄 한 줄 기계어로 번역해가면서 실행시키는 방식을 뜻하며, 한번에 전체 프로그램을 기계어로 번역한 다음 실행하는 컴파일과 대조되는 개념이다. 인터프리트 방식으로 프로그램을 실행할 수 있도록 해 주는 프로그램을 인터프리터(interpreter)라고 부른다. 인터프리트는 원래 '통역'을 뜻한다. 사람이 대화를 할 때 옆에 있다가 한 문장씩 통역해 주는 것과 비슷한 개념이라 할 수 있다. 컴파일은 연설문 전체를 미리 번역했다가 줄줄이 읽어주는 것에 비교할 수 있다.
인터프리트의 장점은 바로 실행할 수 있다는 데에 있다. 컴파일은 프로그램 전체를 기계어로 번역하는 과정에서 시간이 걸리지만 인터프리트는 바로 실행에 들어갈 수 있다. 또한 컴파일 방식은 프로그램의 어느 한 곳이라도 바뀌었다면 전체를 다시 컴파일을 해야 하지만[1] 인터프리트는 그냥 다시 실행하거나, 만약 실행 지점이 바뀐 부분까지 다다르지 않았다면 다시 실행할 필요도 없다. 유연성이라는 면에서는 인터프리터가 유리하다.
단점은 속도. 연설문을 미리 번역해 놨다가 줄줄이 읽는 것과, 연설을 할 때 옆에서 동시통역을 할 때를 비교하면 속도 차이를 쉽게 이해할 수 있다. 컴파일은 그 과정에서 코드를 최적화 하기 위한 다양한 시도를 하지만 인터프리트는 한 줄 한 줄씩 바로바로 실행시켜야 하므로 최적화가 어렵다. 연설문을 미리 번역할 때에는 문장을 다듬고 고치면서 간결하게 만들 수 있지만 동시통역은 바로바로 통역을 해 줘야 하므로 간결성이 떨어지는 것과 비슷하다. 또한 컴파일은 실행하기 전에 컴파일 과정에서 어느 정도 오류를 잡아낼 수 있지만[2] 인터프리트 방식은 일단 실행해 봐야 알 수 있다.
인터프리트와 컴파일을 절충하는 방식도 있는데, 예를 들어 컴파일 방식의 언어를 디버그할 때에는 한 줄 한 줄 실행해가면서 결과를 추적하는 기능이 있다. 이는 컴파일을 하면서 기계어 파일 안에 디버그 정보를 심어 놓는 방식으로 역추적이 가능하도록 한 것이다. 다만 이렇게 컴파일을 하면 실행 파일에 디버그 정보가 들어가므로 파일 크기가 커지고 실행 속도도 느려진다. JIT 컴파일도 사용 폭이 확대되고 있는데, 코드를 처음 실행할 때 컴파일을 해서 속도를 높인다. 자바스크립트의 속도가 비약적으로 빨라진 것도 웹 브라우저 제작사들이 경쟁적으로 JIT 컴파일을 도입하고 성능을 향상시키고 있기 때문이다. 단, 처음 실행시킬 때에는 컴파일을 기다려야 하므로 실행 속도가 느리다.