본문 바로가기

Study

컴파일러 언어와 인터프리터 언어

<원시 프로그램>

- 고급언어 또는 어셈블리 언어와 같이 기호 언어를 사용하여 작성된 프로그램. = 프로그래머가 소스코드로 작성한 프로그램

- 기계어(컴퓨터가 사용하는 언어)에 가까울수록 저급언어, 사람이 이해하기 쉬운 언어일수록 고급언어로 분류한다.

1. 어셈블리 언어(Assembly Language)

- 기계어를 1:1 대응하여 영문자 등의 기호로 표시해 해석을 쉽게한 기호 언어로 저급언어에 해당한다.

- 고급언어와 달리 제한이나 규칙이 없으나, 복잡한 세부사항을 직접 고려해야함. 배우기가 어렵다.

- 기계마다 사용하는 기계어가 다르기 때문에 이식성이 낮다.

- 응용 프로그램의 특정 기능이 고속으로 처리되어야 하거나, 하드웨어를 직접 제어해야 하는 경우 사용됨.

- 어셈블리 언어를 기계어로 바꿔주는 번역기를 어셈블러(Assembler)라고 한다.

2. 고급언어

- 사람이 이해하기 쉽도록 설계된 언어로서 컴퓨터 구조나 기능에 얽매이지 않는다.

- 하드웨어를 제어해야할 경우 어셈블리 언어에 비해 제한이 따른다.

- 고급언어 → 어셈블리 언어 → 기계어로의 번역과정을 거침

- 고급언어를 기계어로 바꿔주는 번역기를 컴파일러(Compiler), 그 과정을 컴파일(Compile)한다고 한다.

저급언어 

고급언어 

- 가독성이 낮다.

- 작성 및 수정이 어렵다.

- 이식성이 낮다.

- 상대적으로 크기가 작아 가볍다.

- 상대적으로 처리속도가 빠르다.

- 가독성이 높다.

- 작성 및 수정이 쉽다.

- 이식성이 높다.

- 상대적으로 크기가 커서 무겁다.

- 상대적으로 처리속도가 느리다. 


<타겟 프로그램>

- 컴퓨터가 이해하는 언어인 기계어로 작성된 프로그램




※ 고급언어를 기계어로 해석하는 방식에 따라 컴파일러, 인터프리터, JIT(Just In Time) 등으로 나눌 수 있다.


<빌드(Build)>

- 소스코드 파일(=원시 파일)을 컴퓨터에서 실행할 수 있는 독립된 소프트웨어로 변환하는 과정 혹은 그 결과물.

- 소스코드 파일 -- 컴파일 --> 목적파일 생성 -- 링커가 라이브러리 등과 링크 --> 실행파일

[C++ 빌드 과정]

이미지출처: http://blog.naver.com/rlaalsrjsa/220746214578




<인터프리터 언어(Interpreter Language)>

- 빌드타임: 사실 상 아무것도 하지 않으므로 컴파일러 언어보다 빠르다.

- 런타임: 한 줄씩 분석해 기계어로 변환한 뒤 기계로 전송하기 때문에 컴파일러 언어보다 느리다.

- 실행속도가 느리나 코드 변경 시 즉시 실행이 가능하며 테스트에 용이함.

- 대표언어: Visual Basic, PHP


<컴파일러 언어(Compiler Language)>

- 빌드타임: 프로그래머가 작성한 모든 코드에 대한 기계어를 생성하므로 인터프리터 언어보다 느리다.

- 런타임: 빌드타임에 작성한 기계어를 모두 기계에 보내기 때문에 인터프리터 언어보다 빠르다.

- 빌드가 느리고, 한번에 기계어를 생성하기 때문에 기계어가 정적이나 실행이 빠르다.

- 기계에 따라 사용되는 컴파일러가 다르기 때문에 환경에 맞는 컴파일러를 선택해야 한다.

- 대표언어: C, C++

구분

컴파일러

인터프리터

번역 단위

전체

한줄(행)

목적프로그램

생성

생성X

실행속도

빠름

느림

번역 속도

느림

빠름

 

<JIT (Just In Time)>

- 인터프리터 + 컴파일러

- 빌드타임: 런타임에서 실행할 수 있는 중간언어로 변환.

(자바의 경우 javac.exe를 이용해 .java 파일을 .class 파일로 변환)

- 런타임: 중간언어를 기계어로 번역해 기계로 전송. 캐싱을 이용해 기존에 만든 기계어를 재활용한다. 런타임시 시간이 오래걸린다.

(자바의 경우 java.exe가 인터프리터로서 .class를 실행하고 해석)

- 어떤 운영체제에서도 같은 컴파일러로 중간언어를 만들기 때문에 운영체제에 독립적임. 

  운영체제에 맞는 중간언어를 기계어로 번역해주는 프로그램이 있으면 됨. (ex) JVM, .NET Framework 등)

- 대표언어: Java, C++

[Java 실행환경]

이미지출처: http://cocomo.tistory.com/499




[참고사이트]

어셈블리어와 고급언어

http://blog.naver.com/jeongmin9946/220484520181

http://siren911.tistory.com/18

http://blog.naver.com/ygszzang11/50106750281

http://comjjin.tistory.com/92


컴파일러 언어와 인터프리터 언어

http://bestofsky.com/28

http://blog.naver.com/yujh0429/220552429996

http://cocomo.tistory.com/499

http://donggas90.blog.me/220118649204

http://aa12369.blog.me/220416854416

'Study' 카테고리의 다른 글

TCP와 UDP  (0) 2017.01.08
MVC 패턴  (0) 2016.12.11
정적인 페이지와 동적인 페이지  (0) 2016.11.26
Apache와 Tomcat의 차이  (0) 2016.11.26
Firebase  (0) 2016.10.10