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 |
파일용량 | 큼 | 작음 |
오류 확인 | 컴파일 시 오류 한꺼번에 출력 | 실행 수 오류가 발생하면 즉시 중단 |
메모리 사용량 | 컴파일 과정에서 메모리 사용량 증가 | 실행 시 메모리 사용량 최적화 가능 |