Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

김규범님의 블로그

컴파일러란 ? 본문

카테고리 없음

컴파일러란 ?

규범김 2020. 10. 27. 20:22

1. 컴파일러란 ?

 

컴퓨터는 아쉽게도 우리가 열심히 C 언어로 작성한 코드(소스 파일)를 이해하지 못한다

C 언어만이 아니라 파이썬도 자바도 다 이해 하지 못한다.

 

우리가 만든 코드(소스 파일)를 컴파일러라는 통역기가 기계어로 번역해주면,

그제야 컴퓨터가 이해한다.

 

지구에 도착한 외계인의 말을 번역해준 외계어 전문가처럼,

컴파일러는 코드를 컴퓨터에 번역해주는 번역가라고 할 수 있다

이 번역하는 과정을 컴파일이라고 한다.

 

컴파일러의 필요성.

 

인간은 문제를 해결하기 위해 컴퓨터를 사용하며 컴퓨터와 의사소통을 하는데 '언어'가 필요하다

컴퓨터는 기계어를 사용하지만 인간이 기계어를 사용하여 문제를 표현하기란 무척 어렵기 때문에

인간은 사람 중심 언어인 고급 언어를 사용한다.

그런데 인간이 사용하는 고급 언어는 컴퓨터가 이해하지 못하며,

따라서 인간이 사용하는 고급언어를 기계어로 변환해주는 컴파일러가 필요한 것이다.

 

컴파일 언어의 종류

C, C++, Java, C#

 

 

C 언어

프로그램을 보다 간단하게 사용하고 설계할 수 있게 하는 운영체제의 공통언어

70년대에 만들어진 절차지향 언어이다 .

절차지향은 명령어를 몇 회 어떤 순위로 실행할지 판단하는 방식이다.

 

C++

C언어의 단점을 보완하고 바꾼 언어

C언어가 절차지향이라면 C++언어는 객체지향이다

C++에서 더 발전된 것이 C#이다.

 

1) 인터프리터 언어 (Interpreted Language)

컴파일러를 거쳐 기계어로 변환되지 않고 바로 실행되는 프로그래밍 언어를 말한다.

프로그래밍 언어 설계할 때 언어 설계자가 자신이 원하는 부분을 구현하는 데에 도움을 준다. 그래서 언어 설계 기간이 엄청나게 단축된다.

프로그래밍 언어 설계할 때 언어 설계자가 자신이 원하는 부분을 구현하는 데에 도움을 준다. 그래서 언어 설계 기간이 엄청나게 단축된다.

- 인터프리터 언어의 종류 : Python, Ruby, Perl, PHP, JavaScript

 

2) 크로스 컴파일러 (Cross compiler)

다른 플랫폼(Windows, Mac)에서 다른 플랫폼(Android, iOS, Embedded OS)의 실행파일을 만들어주는 컴파일러를 크로스 컴파일러라고 말한다.

크로스 컴파일러 툴은 임베디드 시스템 혹은 여러 플랫폼에서 실행파일을 생성하는데 사용된다.

일반적으로 개발의 용이성을 위해, 개발 환경이 편한 곳에서 개발 및 컴파일을 하고, 타겟 디바이스에 실행파일을 옮겨 넣는 식으로 개발한다. 그래서 크로스 컴파일러가 필요하다.

 

3) 바이트 코드 (Byte code)

고급 언어로 작성된 소스 코드를 가상머신이 이해할 수 있는 중간 코드로 컴파일 한 것을 말한다.

바이트코드는 인터프리터 방식으로 해석한다. 즉 바이트코드를 생성하는 것까지가 컴파일이고, 바이트코드 자체는 인터프리터 언어라는 것.

 

2. 컴파일러와 인터프리터의 장단점과 차이점

 

1) 컴파일러

 

[ 장점 ]

1. 매번 번역할 필요가 없다 .

2. 인터프리터에 비해 실행 속도가 빠르다.

3. 전체 실행 시간 면에서 효율적이다.

 

[ 단점 ]

1 .실행 기계가 달라지면 새로 컴파일 해야한다.

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

 

 

2) 인터프리터

 

[ 장점 ]

1. 컴파일러가 비교적 간단하게 되므로 마이크로컴퓨터의 컴파일러나 회화 형언어의 언어처리계에 잘 이용된다.

2. 프로그램이 될 때까지 원시 언어의 형태를 유지하기 때문에 기억 장소가 따로 필요하지 않다.

 

[ 단점 ]

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

2. 실행 속도가 늦다

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

 

 

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

 

1) 컴파일러

1. 한번에 모두 읽고 실행하며, 첫 컴파일 과정이 오래 걸릴 수 있다.

2. 컴파일 이후에는 실행이 빠르고 더 이상 변환하지 않아도 된다.

3. 대표적으로 자바가 있다.

 

2) 인터프리터

1. 코드를 한 줄 한 줄 읽어가며 명령을 처리한다.

2. 바로바로 수정 할 수 있어 용이하다

3. 한 문장씩 처리하기 때문에 속도는 컴파일러 언어에 비해 느리다.