Compile이란?
컴파일이란 인간이 이해할 수 있는 고급 언어로 작성한 프로그램(소스 코드)을
컴퓨터가 실행(execute) 가능한 형식인 기계어의 프로그램으로 변환하는 작업을 말합니다.
![이미지](/resources/images/content/tech_compile_top_img.png)
Compile 개념
컴퓨터는 0과 1로 된 기계어만 이해할 수 있기 때문에 소스코드를 기계어로 변환하는
컴파일 과정이 필요하며, 이 과정을 통해 컴퓨터가 프로그램을 수행할 수 있게 됩니다.
-
프로그래머 Programmer
고급 언어(high level language)
: 인간이 구분하기 쉬운 언어C C++Java 등 소스 코드 -
컴파일러 Compiler
컴퓨터가 실행 가능한 기계어로
변환하는 소프트웨어C, C++, Java 01 -
컴퓨터 CPU
기계어(machine language)
: 기계가 이해할 수 있는 언어0 1
컴파일 과정
컴파일은 컴파일러(compiler)라고 불리는 소프트웨어를 사용해 수행되며,
컴파일 과정은 일반적으로 4가지의 순서를 통해 이루어집니다.
-
Step 01 Source Code Writing
특정 프로그래밍 언어로 소스 코드 작성
인간이 이해하기 쉽도록 작성, 컴퓨터가 직접 실행할 수 없음
-
Step 02 Compilation
작성된 소스 코드 컴파일러 처리
소스 코드 분석, 문법 오류 확인, 중간
코드 또는 기계어 번역 -
Step 03 Linking
일부 프로그래밍 언어 컴파일 후
링크 과정 필요소스 파일을 하나의 실행 파일로 결합
(모듈화된 코드 통합/라이브러리 연결) -
Step 04 Execution
최종 컴파일된 코드
기계어로 변환되어 컴퓨터
CPU에서 실행
컴파일 상세 프로세스
컴파일러가 소스코드를 분석·변환하고 실행가능한 프로그램을 생성하는 과정은 다음과 같습니다.
컴파일러는 단계별 오류를 검출하고 최적화를 수행해, 최종 실행 코드 품질을 향상시킵니다.
![이미지](/resources/images/content/tech_compile_con03_img.png)
-
Source Program (원시 프로그램)
-
프로그래머가 작성한 소스 코드
-
Lexical Analysis (렉시컬 분석)
-
소스 코드를 토큰(Token) 스트림으로 분해
공백/주석 제거 및 식별자/연산자/상수 등 추출
-
Syntax Analysis (구문 분석)
-
소스 코드의 구조/구문(문법) 검사
토큰 스트림을 구문 트리(Parse Tree) 또는 추상구문 트리(Abstract Syntax Tree, AST)로 변환
문법 오류 발견 시 오류 메시지 생성
-
Semantic Analysis (시맨틱스 분석)
-
코드 의미와 의도 검사
변수의 정의와 사용, 데이터 형식 일치, 함수 호출 등 확인
코드 논리 오류나 무결성 문제 식별, 해당 오류 보고
-
Symbol Table Management (테이블 관리)
-
소스 코드에서 정의된 변수/함수/상수/데이터 형식 등의 정보 저장 및 해당 식별자들을 추적/관리하기 위해 테이블 생성/관리
-
Error Handling (오류 관리)
-
시맨틱스 분석 중 발생할 수 있는 오류를 처리/보고하는 프로세스
오류 식별, 디버그 및 수정할 수 있도록 관리
-
Code Optimization (코드 효율화)
-
코드 성능 최적화 과정
중복 코드 제거, 상수 접기, 불필요한 연산제거 등 최적화 기법 적용
코드 실행 속도 향상, 메모리 사용 최적화
-
Code Generation (목적 코드 생산)
-
최종 실행 코드 생성
컴파일러는 중간 코드 또는 AST를 기반으로 목적 코드 생성
특정 하드웨어 아키텍처나 운영 체제에 맞게 생성
-
Object Program (목적 프로그램)
-
실행 가능한 최종 출력물 (프로그램 파일, 라이브러리)