개념

9. 컴파일러와 인터프리터

GenieLove! 2022. 10. 11. 17:57
728x90
반응형

컴파일러와 인터프리터

컴파일러

  • 프로그램 전체를 스캔하여 이를 모두 기계어로 변역
  • 전체를 스캔하기 때문에 초기 스캔 시간 ⬆️
  • ex) C, C++, 자바 등
  • 목적
    • 오류 발견: 소스코드에서 오류를 발견하여 실행 시 문제가 없도록 하는 것
    • 코드 최적화
  • 컴파일 과정(자바)
    1. 개발자가 .java 소스코드를 작성
    2. 자바 컴파일러가 자바 소스코드 파일을 읽어 바이트코드(.class)로 컴파일
      바이트코드 파일: 아직 컴퓨터가 읽을 수 없는 JVM이 읽을 수 있는 코드
    3. 컴파일 된 바이트 코드를 JVM의 클래스 로더(Class Loader)에 전달
    4. 클래스 로더는 동적 로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역인 JVM의 메모리에 올림
    5. 실행 엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행
      실행엔진 방식
      • 인터프리터: 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행 -> 전체적인 실행속도 ⬇️
      • JIT 컴파일러: 인터프리터의 단점을 보완하기 위해 도입된 방식으로, 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고, 이후에는 해당 메소드를 더이상 인터프리팅 하지 않고 바이너리 코드로 직접 실행하는 방식 -> 인터프리팅 방식보다 속도 ⬆️

인터프리터

  • 프로그램 실행 시 한 번에 한 문장씩 번역 -> 실행시간 ⬆️
  • 컴파일러처럼 목적코드를 만들지 않고, 링킹 과정도 거치지 않는다 -> 메모리 효율 ⬆️
  • 한 문장씩 번역될 때 오류를 만나게 되면 바로 프로그램 중지 -> 프로그램을 실행해봐야 오류 발견 가능
  • ex) Python, Ruby, Javascript

 

구분 자바 자바스크립트
변수 선언 필요 선언 필요 없다.
실행 컴파일 후 실행 한 줄씩 실행
장점 오류 찾기와, 코드 최적화, 분할 컴파일에 의한 공동 작업이 가능 실행 편리
사용 프로그램 대형 프로그램 간단한 프로그램

 

 

728x90
반응형

'개념' 카테고리의 다른 글

10. 가상 메모리 관리  (0) 2022.10.22
Redis  (0) 2022.10.19
8. 물리 메모리  (0) 2022.10.09
SQS(Simple Queue Service)  (0) 2022.10.01
SES(Simple Email Service)  (0) 2022.09.23