소스 코드와 명령어

최건우·2023년 1월 18일
0

Python, Java, C와 같은 프로그래밍어로 만든 모든 소스 코드는 컴퓨터 내부에서 명령어로 변환된다.

고급 언어 vs 저급 언어

고급 언어(High-level programming language)

  • 사람이 이해하고 작성하기 쉽게 만들어진 언어로서, 컴퓨터가 이해하지 못하는 언어.
  • 대부분의 프로그래밍 언어가 여기에 속함.
  • 소스 코드는 고급 언어로 작성되어 있으므로, 컴퓨터가 실행할 수 있으려면 반드시 저급 언어로 변환되어야 한다.

저급 언어란(Low-level programming language)

  • 컴퓨터가 직접 이해하고 실행할 수 있는 언어. 저급 언어는 명령어로 이루어져 있다.

기계어(Machine code)

  • 0과 1의 명령어 비트로 이루어진 언어.
  • 이진수, 혹은 가독성을 위해 십육진수로 표현하기도 한다.

어셈블리어(Assembly language)

  • 기계어를 사람이 읽기 편한 형태로 번역한 저급 언어.

어느 분야의 개발자를 지망하느냐에 따라 어떤 수준의 언어를 배울지가 달라진다. 사람이 저급 언어로 개발하는 것은 굉장히 어려운 일이고 대부분 고급 언어를 사용하여 개발하지만, 하드웨어와 밀접한 임베디드 개발자, 게임 개발자, 정보 보안 분야는 어셈블리어를 많이 사용한다.

컴파일 언어와 인터프리터 언어

고급 언어가 저급 언어로 변환되는 두 가지 방식: 컴파일 방식 vs 인터프리터 방식

컴파일 언어

  • 컴파일 방식으로 작동하는 프로그래밍 언어
    • ex. C언어
  • 컴파일(compile): 컴파일러(compiler)에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 과정
  • 컴파일러는 소스 코드를 처음부터 끝까지 실행가능 여부를 확인하고, 만약 하나라도 오류가 발견되면 컴파일은 실패한다.
  • 컴파일러롤 통해 저급 언어로 변환된 코드를 목적 코드(object code)라고 한다.

인터프리터 언어

  • 인터프리트 방식으로 작동하는 프로그래밍 언어
    • ex. Python
  • 인터프리트(interpret): 인터프리터(interpreter)에 의해 소스 코드를 한 줄씩 저급 언어로 변환되어 실행되는 과정
  • 컴파일 언어와 달리, 인터프리터는 소스 코드를 한 줄씩 차례로 실행된다.
  • 때문에, N번째 줄에 문법 오류가 있어도 N-1번째 줄까지는 올바르게 수행된다.

다만, 하나의 프로그래밍 언어가 반드시 둘 중 하나의 방식으로만 작동하지 않는다. 컴파일이 가능한 언어라고 해서 인터프리트가 불가한 것은 아니며, 그 반대 역시도 아니다.

일반적으로 인터프리터 언어가 컴파일 언어보다 느리다. 전체 컴파일 언어는 컴파일 시간이 소요되기는 하지만, 컴파일만 완료되면 컴퓨터가 인터프리트 방식으로 한 줄씩 읽는 것보다 빠르게 읽고 이해할 수 있기 때문이다.

목적 파일 vs 실행 파일

목적 파일

  • 목적 코드(object code)로 이루어진 파일

실행 파일

  • 실행 코드(proceed code)로 이루어진 파일
    • ex. .exe 파일
  • 하나의 실행 파일을 만들기 위해서는 목적 코드를 목적 파일로 만드는 것이 끝이 아니라, 반드시 링킹(linking)을 거쳐야 함.
    • 링킹(linking)
      • 컴파일러가 만들어낸 하나 이상의 목적 파일을 가져와 이를 단일 실행 프로그램으로 병합하는 작업.
      • 작성한 목적 코드에 사용된 외부 기능, 라이브러리를 가져와 연결하는 작업이다.

*이 글은 '혼자 공부하는 컴퓨터 구조+운영체제(한빛미디어, 2022)'를 개인적인 학습을 목적으로 요약한 게시글입니다. 문제가 있는 경우, 지적해 주시면 감사하겠습니다.

profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글