컴파일(Compile)

김맥스·2023년 3월 11일
0

컴퓨터사이언스

목록 보기
1/2
post-thumbnail

1. 컴파일이 필요한 이유

  • 컴퓨터는 모든 명령을 CPU가 처리하고 CPU는 모든 명령을 0과 1로 이해하고 실행한다
  • ‘A’라는 알파벳을 입력할 때 우리는 ‘A’라고 해석하지만 컴퓨터는 00110010과 같은 이진코드로 해석하고 명령을 처리한다

2. 컴파일

1) 개념

  • 컴파일
    • 고급 언어(인간이 구분하기 쉬운 언어)로 작성된 프로그램을 기계어(컴퓨터가 이해할 수 있는 언어)로 번역하고 기계어 프로그램으로 고치는 과정
    • 소스코드를 컴퓨터가 이해할 수 있는 바이너리 코드로 변환하는 작업
    • 원시 코드에서 목적 코드로 옮기는 과정
    • 컴파일 : 원시코드에서 목적코드(목적파일)로 바꾸는 것
    • 링크 : 목적 파일을 실행파일로 바꾸는 것
    • 원시코드 : c언어나 자바, 파이썬 같이 사람이 이해할 수 있는 언어 (소스코드)
    • 목적코드 : 컴퓨터가 이해할 수 있는 언어
    • 실행파일 : 컴퓨터가 이해할 수 있는 언어로 구성
    • 자신이 소스 코드를 작성하고 실행 파일을 만드는 것은 컴파일러(Dev c++, visual studio)가 하는 역할
    • 컴파일이라는 개념은 원시코드에서 목적 파일로 바꾸는 것
    • 대표적인 컴파일 언어 : C, C++, Java, C#
    • 정리 : 인간이 구분하기 쉬운 언어인 고급 언어(=원시코드=소스코드)를 컴퓨터가 이해할 수 있는 0과 1로 구성되어 있는 언어인 기계어(=목적코드=바이너리 코드)로 변환하는 작업이 컴파일이고, 컴파일 언어로는 C, C++, Java가 있다.
  • 컴파일러
    • 고급 언어로 작성된 소스 코드를 저급 언어로 번역하는 프로그램
    • 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 프로그램

2) 컴파일러 원리

  • 컴파일러에서 꼭 지켜야 할 두 가지 조건
    1. 컴파일러는 옮김의 과정에서 프로그램의 뜻을 보존해야 한다. 입력받은 프로그램의 의미를 충실히 따라야 한다.
    2. 실용적인 면에서, 컴파일러는 입력으로 들어온 프로그램을 어떤 면에서든지 개선해야 한다.예를 들어, 소스 코드를 기계어로 옮긴다면 기계가 이해할 수 없었던 언어를 기계가 이해할 수 있게 개선한 것이 된다. 같은 언어로 옮긴 경우에는 성능이 개선되는 등의 장점이 있어야 한다

3) 컴파일러 실행 단계

  1. 구문 분석 : 소스 코드 파일을 읽어 추상 구문 트리 생성, 문법에 맞지 않는 소스 코드는 사용자에게 알림
  2. 최적화 : 추상 구문 트리 분석 및 최적화
  3. 코드 생성 : 목적 코드 생성
  4. 링킹 : 기계어 번역의 경우, 여러 라이브러리 목적 코드를 묶어 하나의 실행 파일 생성 ( 일부는 이 과정을 컴파일 과정에서 제외함)

3. 인터프리터

  • 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램이다. 스크립트 언어로는 Python과 Javascript가 있다.
  • 프로그램이 직접 실행되므로 목적 프로그램은 생성되지 않는다
  • 줄 단위로 번역, 실행되기 떄문에 시분할 시스템에 유용하며 원시 프로그램의 변화에 대한 반응이 빠르다
  • 번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느리다
  • Python, Javascript, R, Ruby

4. 컴파일 언어 vs 인터프리터 언어(=스크립트 언어)

  • 비교

  • 컴파일 언어

    • C, C++, Java
    • 코드를 작성한 후 컴파일을 하면, 컴파일러에 의해 기계어로 변환된 파일이 생성되고 컴퓨터는 그 파일을 실행
    • 이미 기계어로 번역된 파일을 컴퓨터가 실행하므로 스크립트 언어에 비해 빠르고 소스코드에 문법적 오류가 있으면 컴파일 에러를 발생시켜 디버깅이 수월
    • 문법적 제약이 많아 작성이 비교적 어렵다
    • 운영체제마다 사용하는 기계어가 다르기 때문에 운영체제에 따라 작업을 각각 다르게 해줘야 한다
    • 방대한 작업을 수행하는 코드 작업 적절
  • 스크립트 언어

    • Python, Javascript
    • 별도의 파일 생성 없이 소스 코드가 작성될 때마다 인터프리터가 해당 코드를 기계어로 번역하고 실행
    • 컴퓨터가 코드를 실행하는 과정에서 소스 코드를 기계어로 번역하는 과정이 포함되어 있으므로 컴파일 언어에 비해 프로그램 실행 시간이 느리다
    • 문법적 오류가 있든 없든 일단 실행되기 때문에 디버깅이 비교적 어렵다
    • 문법적 제약이 비교적 적어 작성이 비교적 쉽다
    • 운영체제를 신경 쓸 필요 없이 한 번만 작성하면 됨
    • 간단한 작업을 수행하는 코드 작업 적절
  • 실행 구조 차이

  • 자바는 컴파일 언어이면서 인터프리터 언어

profile
3년차 백엔드 개발자의 공부 기록

0개의 댓글