정보처리기사/프로그래밍 언어 활용

컴파일러 vs 인터프리터 정리

glorypang 2025. 10. 18. 22:56
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)
    ↓
[인터프리터 엔진]
    ↓
한 줄씩 읽기 → 즉시 실행 → 다음 줄
    ↓
결과 출력

동작 방식

  1. 소스 코드 읽기: 코드를 한 줄(또는 한 문장)씩 읽음
  2. 즉시 해석: 해당 줄을 바로 기계어로 변환
  3. 바로 실행: 변환과 동시에 실행
  4. 다음 줄로: 다음 줄 읽고 반복
# 예시: Python 인터프리터
print("첫 번째 줄")    # 이 줄 읽고 → 해석 → 실행
print("두 번째 줄")    # 이 줄 읽고 → 해석 → 실행
print("세 번째 줄")    # 이 줄 읽고 → 해석 → 실행

인터프리터 특징

  • 한 줄씩 읽어가며 즉시 실행
  • 별도의 실행 파일 생성 없음(번역과 실행이 동시에 이루어지므로)
  • 즉시 실행 가능 (컴파일 시간 불필요)
  • 실행 속도 상대적으로 느림
  • 실행 중 해당 줄에서 오류 발견
  • 플랫폼 독립적 (인터프리터만 있으면 됨)

예시 언어: Python, JavaScript, Ruby, PHP, Basic

728x90
반응형
LIST