본문 바로가기
프로그래밍/일반

컴파일 / 어셈블 / 링킹 / 인터프리터

by 불타는홍당무 2016. 1. 12.

※ 이 글은 lastmorning.tistory.com/entry/컴파일러-인터프리터-링커-어셈블러의-정의를 참고하여 작성하였습니다.




01 컴파일 / 어셈블 / 링크

 


컴파일(Compile) 고수준 언어(C, JAVA 등 일반적으로 우리가 말하는 프로그래밍 언어)를 저수준 언어(어셈블리어, 기계어)로 번역하는 것

 

컴파일러(Compiler)는 해석기, 번역기란 뜻으로 특정 프로그래밍 언어로 쓰여진 문서를 다른 프로그래밍 언어로 옮기는 프로그램이다. 기존의 문서를 소스코드(혹은 원시코드)라 부르고, 출력되는 문서를 목적코드라 하며, 주로 다른 프로그램이나 하드웨어가 처리하기 용이한 형태로 출력된다(경우에 따라서는 사람이 읽을 수 있는 문서 파일이나 그림 파일 등의 형태가 되기도 한다).소스코드를 목적코드를 옮기는 과정을 컴파일(compile)이라고 하고 그 목적은 사람이 이해하기 쉬운 고수준 언어를 기계가 이해하기 쉬운 기계어로 바꾸어주기 위해서이다.

 

어셈블(Assemble) 어셈블리어를 기계어로 번역하는 것

 

컴퓨터가 쓰는 기계어는 비트 열 또는 16진수로 표현되기 때문에 사람이 이해하기 어렵다. 그래서 사람이 이해하기 쉽도록 기계어와 어셈블러를 일대일로 대응하는 기호로 표현된 언어가 어셈블리어이다. 어셈블러(Assembler)는 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해주는 컴퓨터언어 번역 프로그램이다. 어셈블러는 컴퓨터 명령어들을 컴퓨터 프로세서가 기본 연산을 수행할 수 있게 피트 패턴으로 변환시켜 주는 프로그램이다.

 

링킹 어셈블러를 거친 오브젝트 코드와 사용된 함수를 포함하고 있는 함수 라이브러리를 묶어주는 것.

 

이 작업을 하는 프로그램을 링커라 부른다.

 

인터프리터 고수준 언어로 작성된 원시코드들을 한번에 한 줄씩 읽어들여서 바로 실행하는 컴퓨터 프로그램

 

인터프리터(Interpreter)는 해석기라는 뜻으로 프로그래밍 언어의 소스코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시코드를 기계어로 번역하는 컴파일러와 다르다. 인터프리터는 아래 과정 중 적어도 하나의 기능을 가진 프로그램이다.

-       소스코드를 직접 실행한다.

-       소스코드를 효율적인 다른 중간코드로 변환하고, 변환한 것을 바로 실행한다.

-       인터프리터 시스템의 일부인 컴파일러가 만든 미리 컴파일된 코드의 실행을 호출한다.

 


 

02 컴파일러 vs 인터프리터

 


                 컴파일러 장점

-       컴파일러는 컴파일하는 과정이 복잡하고 그 시간이 많이 걸리게 된다. 한번 컴파일하면 그대로 사용이 가능하여 반복작업을 할 경우 처리 시간이 매우 빠르다.

-       컴파일 하는 과정에서 단계별로 주기억장치안에 들어가기 때문에 기억장소의 크기가 조정이 가능하다.

-       전체 실행 시간 면에서 매우 효율적이다.

-       컴파일러는 매번 번역할 필요가 없다.


컴파일러 단점

-       한 줄 입력 시 프로그램이 때로는 몇 백 개의 기계어로 번역되기 때문에 그 프로그램은 큰 기억용량을 요구한다. 특히 입출력 명령은 입출력 형식을 위한 코드 외에 기계 상태 파악코드로 인해 큰 기억 장치가 요구된다.

 


인터프리터 장점

-       프로그램이 실행 될 때까지 원시코드의 형태를 유지하기 때문에 기억 장소가 따로 필요하지 않다.


인터프리터 단점

-       원시코드를 직접 실행하기 때문에 이 실행에 필요한 소프트웨어가 항상 기계 안에 상주하면서 원시코드의 명령들을 받아서 처리해야 한다. 만일 반복을 하게 되면 그때마다 원시 프로그램을 해석하고 처리해야 하기 때문에 많은 시간이 걸릴 수도 있다.

-       인터프리터의 실행 시간은 컴파일러 방법에 비해 비효율적이다.

-       실행순서를 맞춰 주어야 한다(실행 시간을 설정해 놓아야 한다)



                 컴파일러 언어    Fortran, Algol, PL/1, Pascal, Cobol, C, C++

                 인터프리터 언어  Lisp, Snobol4, APL, Prolog, Python