컴파일러(Compiler)
: 프로그래밍 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어(또는 바이트코드)로 번역하는 프로그램.
컴파일러는 전체 소스 코드를 한 번에 번역하여 실행 가능한 파일을 생성한다.

컴파일러의 주요 역할은 네 가지로 구분된다.
1. 소스 코드 분석: 소스코드의 문법이 올바른지 확인한다. 문법이 틀리면 에러메시지를 출력한다.
2. 코드 최적화: 실행 속도를 높이거나 메모리 사용량을 줄이기 위해 코드를 최적화한다.
3. 코드 변환: 고급 언어로 작성된 소스 코드를 저수준 언어(기계어 또는 바이트 코드)로 변환한다.
4. 목적 파일 생성: 실행 가능한 프로그램으로 변환되는 파일(.class, .exe 또는 .o)을 생성한다.
컴파일러의 작동 과정은 여섯가지 정도로 구분된다.
1. 어휘 분석(Lexical Analysis)
● 소스코드를 토큰(프로그램의 최소 단위)로 분해한다.
● 예: int a =5; → int, a, =, 5, ;
2. 구문 분석(Syntax Analysis)
● 문법 구조를 검사한다.
● 예: int a = 5; → 정상 / int = a 5 ; → 에러: 문법 오류
3. 의미 분석(Semantic Analysis)
● 코드의 의미를 검사한다. 타입 일관성, 변수 선언 여부 등을 확인한다.
● 예: int a = "Hello"; → 에러: 타입 불일치
4. 중간 코드 생성 (Intermediate Code Generation)
● CPU에 독립적인 중간 코드 형태로 변환한다.
● 예: 고수준 언어에서 로우 레벨 코드로 변환
5. 코드 최적화 (Code Optimization)
● 불필요한 코드 제거 및 최적화로 프로그램의 성능을 향상시킨다.
● 예: 불필요한 계산 제거, 루프 최적화 등
6. 목적 코드 생성 (Code Generation)
● 최종적으로 실행 가능한 기계어 또는 바이트 코드(.class 등)를 생성한다.

인터프리터(Interpreter)
: 소스 코드를 한 줄씩 읽어서 즉시 실행하는 프로그램. 즉, 프로그램 전체를 기계어로 변환한 후 실행하는 컴파일러와 달리, 인터프리터는 코드 한 줄을 해석하고 바로 실행한다. 이런 방식은 프로그램을 바로 실행할 수 있어, 빠른 테스트와 디버깅에 유리하다.
인터프리터의 주요 역할은 다음 세 가지로 구분된다.
1. 문법 확인 및 해석: 코드의 문법을 확인하며 한 줄씩 해석한다.
2. 실행: 해석한 내용을 즉시 실행한다.
3. 실행 중 오류 처리: 코드 실행 중 오류가 발생하면 즉시 중지하고 오류 메시지를 출력한다.
인터프리터의 작동 과정은 세가지 정도로 구분된다.
1. 어휘 분석(Lexical Analysis)
● 소스코드를 토큰(프로그램의 최소 단위)로 분해한다.
● 예: print("Hello, World!") → print, "Hello, World!"
2. 구문 분석(Syntax)
● 코드의 문법이 올바른지 확인한다.
● 예: print("Hello") → 정상 / print("Hello → 에러(문자열 미완성)
3. 해석 및 실행
● 코드를 해석하여 즉시 실행한다.
● 예: print("Hello") → 출력: Hello
컴파일러와 인터프리터의 차이
| 항목 | 컴파일러 | 인터프리터 |
| 번역 방식 | 전체 소스 코드를 한 번에 번역 | 한 줄씩 번역하며 실행 |
| 출력 파일 | 실행 파일(.class, .exe 등) 생성 | 별도의 실행 파일 없음 |
| 실행 속도 | 빠름(한 번 번역 후 실행) | 느림 (실행 시마다 해석) |
| 디버깅 | 디버깅이 상대적으로 복잡함 | 코드 수정 후 바로 실행 가능 |
| 대표 언어 | C, C++, Java | Python, JavaScript, PHP |
하이브리드 !?
: 일부 언어는 컴파일러와 인터프리터의 장점을 결합한다.
● Java
- javac로 바이트코드(.class)로 컴파일 한 후, JVM(Java Virtual Machine)이 해당 바이트코드를 인터프리터 방식으로 실행한다. JVM 알아보기 →
● Python
- Python은 .py 파일을 바이트코드로 변환한 후, 내부적으로 PVM(Python Virtual Machine)이 바이트코드를 해석하며 실행한다.
'Computer Science' 카테고리의 다른 글
| 확장자명은 무슨 역할을 하나 ? (1) | 2025.02.18 |
|---|---|
| 정적 콘텐츠를 파일로 저장하기 ? vs Base64 방식으로 저장하기 ? (4) | 2025.02.07 |
| 운영체제의 메모리 관리 방식에 대해 알아보기 (3) | 2025.01.17 |
| Linux 권한설정 알아보기 (6) | 2025.01.16 |
| 메모리 구조 알아보기 (6) | 2025.01.09 |