컴파일러 vs 인터프리터

이찬영·2022년 4월 4일
0
post-thumbnail

컴파일러언어와 인터프리터 언어를 비교하기 전에 저급언어와 고급언어의 차이점을 알아야한다.

언어의 역사

컴퓨터에서는 1과0으로 표현한다. 이러한 단위를 비트(bit)라고 한다. 컴퓨터에게 일을 시키려면 컴퓨터가 알아들을 수 있는 말로 지시(instruction)를 내려야 한다.

이럴때 사용되는 것을 저급 언어(low-level language)라고 한다.

그런데 사람이 1과 0으로 프로그래밍하는 것이 가능할까? "컴퓨터야, 10111101한 다음에 01001011하고, 만약에 10011010이면 10101100하고 그렇지 않으면 11010011 해다오, 알았징??" 너무 어렵다....

그런 어려움이 있기 때문에 사람이 프로그램 작성을 쉽게 할 수 있도록 요즘 많이 쓰는 C/C++, 파이썬, 자바 같은 고급 언어(high-level language)가 생겨났다.

컴파일러와 인터프리터 차이점

사람이 한 마디 할 때마다 동시통역해주는 방식을 인터프리트(interpret) 방식이라고 한다.
사람이 말하는 것을 처음부터 끝까지 듣고 나서 한꺼번에 바꿔주는 것을 컴파일(compile) 방식이라고 한다.

아래의 표를 보면서 좀더 확실히 알아보자

컴파일러인터프리터
전체 프로그램을 스캔해서 기계어로 한 번에 번역한다각각의 명령어를 한 번에 한 개씩 번역하고 처리한다
소스 코드를 분석하는 데 많은 시간이 걸리지만 전반적인 실행 시간은 비교적 빠르다소스 코드를 분석하는 데 걸리는 시간은 적지만 전반적인 실행 시간은 더 느리다
연결을 위한 중간 객체 코드를 생성하기 때문에 더 많은 메모리가 필요하다중간 객체 코드가 생성되지 않아 메모리 사용이 효율적이다
전체 프로그램을 스캔한 후에 오류 메시지를 생성하기 때문에 디버깅이 비교적 어렵다첫 번째 오류가 발생할 때까지 프로그램을 계속 번역한다. 그래서 디버깅이 쉽다
C, C++, C#, Java, Fortran, COBOLPython, Ruby, Basic, JavaScript, SQL, HTML

컴파일러 언어의 종류

1) C

모든 컴퓨터 시스템에서 사용할 수 있도록 설계된 프로그래밍 언어. 다양한 플랫폼에서 비교적 동일한 구현이 가능. 시스템 프로그램 개발에 매우 적합하며, 응용 프로그램 개발에도 많이 쓰임.

2) C++

기존 C언어의 기능을 완전히 포함하면서 객체지향 프로그래밍을 지원하는 언어. 다중상속, 템플릿, 연산자 오버로드, 예외처리, 실행 시 형식별 등의 기능이 있다.

3) C#

문법적인 특성이 자바와 상당히 유사하며 C#을 통하여 다룰 수 있는 닷넷 플랫폼의 기술들조차도 자바를 염두에 둔 것이 많아서 자바와 가장 많이 비교된다.

인터프리터 언어의 종류

1) Python

다양한 플랫폼에서 쓸 수 있고, 라이브러리(모듈)가 풍부하며, 여러 교육기관, 연구기관 및 산업계에서 이용이 증가하고 있다. 관련 문서도 정리가 잘 되어 있고, 유니코드 문자열을 지원해서 다양한 언어의 문자 처리도 쉽다

2) Ruby

쉽고 이식성이 높은 언어로, 유닉스, 리눅스, 윈도우, OS X, MS-DOS 등 많은 플랫폼에 이식되어 있다. 순수 객체지향 언어라 정수나 문자열 등을 포함한 데이터 형 등 모든 것이 객체이다

3) Basic

절차형 언어로 교육용으로 개발되어 문법이 쉬운 언어. 다양한 종류의 베이직이 존재하며 소스 코드는 서로 호환되지 않는다. 인터프리터 방식이 많았으나 최근에는 컴파일러 방식도 많아지고 있다

Java의 컴파일러와 인터프리터의 역할?

  1. 자바 컴파일러는 .java 파일을 javac(java compiler)가 바이트코드로 쓰여진 .class 파일로 변환한다.

  2. 즉, 컴파일러는 자바 소스코드를 JVM을 위한 기계어로 변환한다
    자바인터프리터는 자바컴파일러에 의해 변환된 클래스파일내의 바이트코드를 특정 환경의 기계에서 실행될 수 있도록 변환한다. 다른 예를 들어보면 IBM PC에서 작성된 프로그램이 매킨토시에서도 실행할 수 있도록 변환하는다는 의미이다.

Java는 왜 컴파일러와 인터프리터 모두 사용하는 가?

바로 기계어로 변환하는 컴파일러의 경우는 프로그램이 작성된 기계상에서실행할 때 매우 효율적으로 실행된다. 이는 대부분의 하드웨어 제어 시스템의 프로그래밍언어가 C인 이유이다. 그러나 이와 동시에 기계 종류에 종속된다는 말이기도 하다. 자바 인터프리팅은 자바 컴파일러를 통해 생성된 클래스파일을 기계어로 변환한다.

  1. 인터프리팅의 첫 번째 장점은 플랫폼에 종속되지 않는다.
    물론 컴파일러를먼저 수행하고 인터프리팅 하는 과정 때문에 컴파일 과정만 필요한 프로그래밍 언어보다는 속도가 느리다.
    두 번째 장점은 자바 바이트코드는 컴퓨터와 프로그램 사이에 별도의 버퍼역활을 한다.

  2. 이는 보안적으로 장점이 될 수 있다. 인터넷이나 기타 매체를 통해 신뢰할 수 없는 프로그램을 다운받거나 실행할 수 있는 경우 어느정도 보장 될 수 있다. 자바 인터프리터를 사용함으로써 바이러스나 기타 악성 프로그램에 대응 하는 가드 같은 보안 계층에 의해 보호 될 수 있다는 의미이다. 자바와 자바 바이트 코드의 조합으로 플랫폼에 독립적이고 안전한 환경을 제공하면서 동시에 현대 프로그래밍 추상화를 완전히 수용한다.

참고 사이트

인터프리터와 컴파일러
[컴퓨터 언어] 컴파일러 VS 인터프리터
Java는 왜 컴파일러와 인터프리터 둘 다 가지는가?
컴파일러 & 어셈블러 & 인터프리터 알아보기

profile
개발을 탐구하자

0개의 댓글