게으른 나에게

[CS] - 컴파일러(Compiler)와 인터프리터(Interpreter) 본문

My Study/CS

[CS] - 컴파일러(Compiler)와 인터프리터(Interpreter)

handbefore 2025. 3. 24. 18:04

개요

  • 컴퓨터는 고급 언어로 작성된 코드를 직접 이해하지 못함
  • 기계어(Machine Code)로 변환하는 과정이 필요 → 방식 2가지

컴파일러(Compiler)

  • 소스 코드를 한 번에 기계어로 변환 → 실행 가능한 바이너리 파일(실행 파일)을 생성
  • 변환 과정에서 최적화(Optimization) 수행하여 실행 속도를 빠르게 함

컴파일러(Compiler) 특징

  • 전체 코드를 스캔 후 컴파일 → 실행 파일 생성
  • 오류를 한 번에 확인 가능
    • 컴파일 시 오류 발생 시 실행 불가
  • 초기 컴파일 시간이 오래 걸리지만, 이후 실행 속도가 빠름
  • 최적화가 가능하여 대규모 프로그램에서 성능이 우수

장점

  • 빠른 실행 속도 → 한 번 컴파일 후 실행하므로 성능이 우수함
  • 코드 보안성 높음 → 컴파일된 실행 파일은 소스 코드가 노출되지 않음

❎ 단점

  • 개발 속도 저하 → 코드 수정 후 다시 컴파일해야 실행 가능
  • 운영 체제 종속적 → 특정 OS/아키텍처에서 실행 가능하며, 다른 환경에서 실행하려면 다시 컴파일 과정 필요
  • 메모리 사용량 증가 → 최적화 과정에서 더 많은 메모리를 사용

💡 컴파일 언어

C, C++, Java, Go

 


 

인터프리터(Interpreter)

  • 소스 코드를 한 줄씩 읽고 즉시 실행하는 방식
  • 컴파일 과정이 없으며, 실행하면서 오류 확인 가능

인터프리터(Interpreter) 특징

  • 빠른 개발 속도 → 코드 변경 후 즉시 실행 가능
  • 동적 타이핑 지원 → 변수 타입을 명시하지 않아도 됨
  • 코드 실행 중 오류 발생 시 즉시 중지
    • 컴파일러와 다르게 실행 후 오류 확인

장점

  • 빠른 개발 속도 → 코드를 수정 후 즉시 실행 가능
  • 유연한 코드 작성 가능 → 변수의 타입을 명시하지 않아도 됨, 코드 작성 간결
  • 메모리 효율이 높음 → 별도의 실행 파일을 생성하지 않음

❎ 단점

  • 실행 속도가 느림 → 코드 실행 시마다 해석을 해야 하므로 속도가 느림
  • 코드 보안 취약 → 소스 코드가 그대로 노출되므로 보안에 취약
  • 대규모 프로젝트에서 성능 저하 가능 → 복잡한 연산 수행 시 비효율적

💡 인터프리터 언어

Python, JavaScript, Ruby

 

 


 

컴파일러 VS 인터프리터

구분 컴파일러 인터프리터
번역 방식 전체 코드 한번에 번역 후 실행 한 줄씩 번역하면서 실행
개발 편의성 코드 수정하려면 컴파일 다시 실행 코드 수정 후 즉시 실행
실행속도 빠름 (한 번만 변환 후 실행) 느림 (실행 시 마다 해석)
보안 코드 유출 X (기계어 변환됨) 소스 코드 유출 O
파일용량 작음
오류 확인 컴파일 시 오류 한꺼번에 출력 실행 수 오류가 발생하면 즉시 중단
메모리 사용량 컴파일 과정에서 메모리 사용량 증가 실행 시 메모리 사용량 최적화 가능