728x90
반응형
SMALL
컴파일이란?
인간이 작성한 고급 언어(C, C++ 등)를 컴퓨터가 이해하는 기계어(0과 1)로 번역하는 과정
컴파일러 (Compiler)
컴파일 과정 4단계
전처리기 (Preprocessor)
- 역할: #include, #define 등 전처리 구문을 처리
- 입력: .c, .cpp
- 출력: .i, .ii
- 작업: 헤더 파일 포함, 매크로 치환, 조건부 컴파일
컴파일러 (Compiler)
- 역할: 고수준언어를 저수준 언어로 변환, 기계어와 가장 가까운 형태
- 입력: .i
- 출력: .s, .asm
- 작업: 문법 검사, 최적화, 어셈블리어 생성
어셈블러 (Assembler)
- 역할: 어셈블리어를 기계어로 번역
- 입력: .s
- 출력: .o, .obj (목적 파일)
- 작업: 기계어 코드 생성
링커 (Linker)
- 역할: 여러 목적 파일과 라이브러리 결합
- 입력: .o + 라이브러리
- 출력: .exe, .out (실행 파일)
- 작업: 외부 참조 해결, 최종 실행 파일 생성
컴파일 흐름도
소스 코드 (main.c)
↓
[전처리기] → main.i
↓
[컴파일러] → main.s
↓
[어셈블러] → main.o
↓
[링커] → main.exe
컴파일러 특징
- 전체 코드를 한 번에 번역
- 실행 파일 생성 (독립적으로 실행 가능)
- 실행 속도 빠름 (한번 번역한 후에는 다시 번역하지 않음)
- 컴파일 시점에 모든 오류 발견
- 플랫폼별로 재컴파일 필요
예시 언어: C, C++, Java, Go, Rust
인터프리터 (Interpreter)
인터프리터 실행 과정
소스 코드 (script.py)
↓
[인터프리터 엔진]
↓
한 줄씩 읽기 → 즉시 실행 → 다음 줄
↓
결과 출력
동작 방식
- 소스 코드 읽기: 코드를 한 줄(또는 한 문장)씩 읽음
- 즉시 해석: 해당 줄을 바로 기계어로 변환
- 바로 실행: 변환과 동시에 실행
- 다음 줄로: 다음 줄 읽고 반복
# 예시: Python 인터프리터
print("첫 번째 줄") # 이 줄 읽고 → 해석 → 실행
print("두 번째 줄") # 이 줄 읽고 → 해석 → 실행
print("세 번째 줄") # 이 줄 읽고 → 해석 → 실행
인터프리터 특징
- 한 줄씩 읽어가며 즉시 실행
- 별도의 실행 파일 생성 없음(번역과 실행이 동시에 이루어지므로)
- 즉시 실행 가능 (컴파일 시간 불필요)
- 실행 속도 상대적으로 느림
- 실행 중 해당 줄에서 오류 발견
- 플랫폼 독립적 (인터프리터만 있으면 됨)
예시 언어: Python, JavaScript, Ruby, PHP, Basic
728x90
반응형
LIST