"컴파일"의 두 판 사이의 차이
잔글 (→같이 보기) |
|||
1번째 줄: | 1번째 줄: | ||
− | '''컴파일'''(compile)이란 [[C 언어|C]], [[자바|Java]] 등 인간이 이해할 수 있는 고급 언어로 작성된 프로그램 [[소스 코드]]를 [[컴퓨터]]가 이해할 수 있는 [[기계어]] 또는 [[바이트코드]]로 번역해 주는 것을 말한다. 반면 [[스크립트 언어]]인 [[자바스크립트|JavaScript]], [[제이쿼리|jQuery]], [[PHP]], [[ASP]], [[JSP]] 등은 컴파일 과정이 필요 없이 바로 실행될 수 있다. | + | '''컴파일'''(compile)이란 [[C 언어|C]], [[자바|Java]] 등 인간이 이해할 수 있는 고급 언어로 작성된 프로그램 [[소스 코드]]를 [[컴퓨터]]가 이해할 수 있는 [[기계어]] 또는 [[바이트코드]]로 번역해 주는 것을 말한다. 반면 [[스크립트 언어]]인 [[자바스크립트|JavaScript]], [[제이쿼리|jQuery]], [[PHP]], [[ASP]], [[JSP]] 등은 컴파일 과정이 필요 없이 바로 실행될 수 있다. 쉽게 말해 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정이다. 원시코드에서 목적 코드(목적 파일)로 바꾸는 것이 컴파일이로 목적 파일을 실행 파일로 바꾸는 것이 링크이다. 원시코드는 c언어나 java, 파이썬 같은 사람이 이해할 수 있는 언어를 말하고 목적 파일은 컴퓨터가 이해할 수 있는 언어를 말한다. 실행 파일도 마찬가지로 컴퓨터가 이해할 수 있는 언어로 구성되어 있다. 컴파일에 대해 알지 못한 사람들이 많이 오해하고 있는 부분이 자신이 소스 코드를 작성하고 실행 파일을 만드는 것을 컴파일이라고 생각하지만 이것은 컴파일러가 하는 역할일 뿐 컴파일이라는 개념은 원시코드에서 목적 파일로 바꾸는 것이다. 바꾸어진 목적 파일은 단순한 컴퓨터가 이해할 수 있는 목적 파일일 뿐 실행할 수는 없으면 이것을 링커라는 실행 가능할 파일로 만드는데 이 실행파일을 .exe파일이라고 부른다. |
+ | [[파일:컴파일이해.png|500픽셀|섬네일|컴파일 이해]] | ||
+ | |||
+ | |||
+ | == 특징 == | ||
+ | === 필요성 === | ||
+ | 컴퓨터는 모든 명령 CPU가 처리하고 CPU는 모든 명령을 0과 1로 이해하고 실행한다. CPU는 0과 1, 오직 2가지 경우 밖에 모른다. 'A'라는 알파벳을 입력할 때 우리는 'A'라고 해석하지만 컴퓨터는 00110010와 같은 이진코드로 해석하고 명령을 처리한다는 것이다. 즉, 우리의 언어는 컴퓨터가 이해하지 못하므로 컴퓨터가 이해할 수 있는 통역사인 컴파일이 필요하다.<ref>Mark J, 〈[https://m.blog.naver.com/white_cap/221003190571 (C언어)(컴파일)컴파일 이란?]〉, 《네이버 블로그》, 2017-05-11</ref> | ||
+ | [[파일:컴파일.png|500픽셀|섬네일|컴파일의 필요성]] | ||
== 단계 == | == 단계 == | ||
29번째 줄: | 36번째 줄: | ||
{{각주}} | {{각주}} | ||
+ | |||
+ | == 참고 자료 == | ||
+ | * Mark J, 〈[https://m.blog.naver.com/white_cap/221003190571 (C언어)(컴파일)컴파일 이란?]〉, 《네이버 블로그》, 2017-05-11 | ||
== 같이 보기 == | == 같이 보기 == |
2020년 9월 8일 (화) 15:42 판
컴파일(compile)이란 C, Java 등 인간이 이해할 수 있는 고급 언어로 작성된 프로그램 소스 코드를 컴퓨터가 이해할 수 있는 기계어 또는 바이트코드로 번역해 주는 것을 말한다. 반면 스크립트 언어인 JavaScript, jQuery, PHP, ASP, JSP 등은 컴파일 과정이 필요 없이 바로 실행될 수 있다. 쉽게 말해 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정이다. 원시코드에서 목적 코드(목적 파일)로 바꾸는 것이 컴파일이로 목적 파일을 실행 파일로 바꾸는 것이 링크이다. 원시코드는 c언어나 java, 파이썬 같은 사람이 이해할 수 있는 언어를 말하고 목적 파일은 컴퓨터가 이해할 수 있는 언어를 말한다. 실행 파일도 마찬가지로 컴퓨터가 이해할 수 있는 언어로 구성되어 있다. 컴파일에 대해 알지 못한 사람들이 많이 오해하고 있는 부분이 자신이 소스 코드를 작성하고 실행 파일을 만드는 것을 컴파일이라고 생각하지만 이것은 컴파일러가 하는 역할일 뿐 컴파일이라는 개념은 원시코드에서 목적 파일로 바꾸는 것이다. 바꾸어진 목적 파일은 단순한 컴퓨터가 이해할 수 있는 목적 파일일 뿐 실행할 수는 없으면 이것을 링커라는 실행 가능할 파일로 만드는데 이 실행파일을 .exe파일이라고 부른다.
특징
필요성
컴퓨터는 모든 명령 CPU가 처리하고 CPU는 모든 명령을 0과 1로 이해하고 실행한다. CPU는 0과 1, 오직 2가지 경우 밖에 모른다. 'A'라는 알파벳을 입력할 때 우리는 'A'라고 해석하지만 컴퓨터는 00110010와 같은 이진코드로 해석하고 명령을 처리한다는 것이다. 즉, 우리의 언어는 컴퓨터가 이해하지 못하므로 컴퓨터가 이해할 수 있는 통역사인 컴파일이 필요하다.[1]
단계
컴파일은 다음 4가지 단계를 거쳐 실행된다.
- 1단계 스캔
스캐너(scanner)는 소스 코드에서 한 번에 한 문자씩 읽고 어떤 문자가 어느 라인에 있는지 추적한다.
- 2단계 어휘 분석
컴파일러는 소스 코드에 나타나는 문자 시퀀스를 일련의 문자열인 토큰으로 변환한다. 이 문자는 어휘 분석기라는 프로그램에서 특정한 규칙에 의해 연결이 된다. 어휘 분석기는 기호 표를 사용하여 생성된 토큰에 해당하는 단어를 소스 코드에 저장한다.
- 3단계 구문 분석
이 단계에서는 사전 분석을 통해 구문 분석을 수행한다. 사전 처리를 통해 어휘 분석 중에 작성된 토큰이 사용법에 따라 올바른 순서인지 여부를 결정한다. 원하는 결과를 얻을 수 있는 키워드의 집합의 올바른 순서를 구문이라 한다. 컴파일러는 구문의 정확성을 보장하기 위해 코드를 확인해야 한다.
- 4단계 의미 분석
의미 분석은 여러 가지 단계로 구성된다. 처음으로 주어진 언어의 문법에 대한 순서와 함께 토큰의 구조가 검사된다. 토큰의 구조의 의미는 파서와 분석기에 의해 해석되어 최종적으로 객체 코드라는 중간 코드를 생성한다. 오브젝트 코드는 프로그램에서 마주칠 때 대응하는 토큰에 대한 프로세서 조치를 나타내는 명령어를 포함한다. 마지막으로 전체 코드가 파싱되어 해석이 가능한지 확인한다. 일단 최적화가 수행될 수 있다면, 수정된 적절한 토큰이 오브젝트 코드에 삽입되어 최종 오브젝트 코드가 생성되어 파일 내에 저장된다.[2]
평가
컴파일의 장단점은 다음과 같다.
장점
- 한번 컴파일을 하면 그대로 사용이 가능하며 반복 작업을 처리할 경우 시간 소모를 매우 줄일 수 있다.
- 컴파일 과정에서 단계별로 주기억장치로 들어가기 때문에 기억장소의 크기가 조정이 가능하다.
- 전체 실행 시간을 매우 효율적으로 절약할 수 있다.
- 컴파일러는 일일이 매번 따로 번역할 필요가 없다.
단점
- 한 줄로 입력할 경우 프로그램이 때로는 몇 십, 몇 백 개의 기계어로 번역되기 때문에 프로그램 실행을 위해서는 대용량의 기억공간이 필요하다.
각주
- ↑ Mark J, 〈(C언어)(컴파일)컴파일 이란?〉, 《네이버 블로그》, 2017-05-11
- ↑ 출처 : https://www.techopedia.com/definition/3912/compiler
참고 자료
- Mark J, 〈(C언어)(컴파일)컴파일 이란?〉, 《네이버 블로그》, 2017-05-11
같이 보기