본문 바로가기
CS

[컴퓨터구조] 소스코드와 명령어

by solanarey 2023. 9. 28.

소스코드와 명령어

고급언어와 저급언어

고급언어

컴퓨터는 우리가 흔히 아는 C, C++, Java, Python과 같은 프로그래밍 언어를 이해할 수 없다.

프로그래밍 언어는 컴퓨터가 이해하는 언어가 아닌 사람이 이해하고 작성하기 쉽게 만들어진 언어이다.

이렇듯 사람을 위한 언어를 고급언어라고 한다.



저급언어

고급언어와 반대로 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 한다.

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

고급 언어로 작성된 소스코드가 실행되려면 반드시 저급언어, 즉 명령어로 변환되어야 한다.

저급 언어에는 기계어와 어셈블리어 두 가지 종류가 있다.

우선 기계어란 0과 1의 명령어 비트로 이루어진 언어이다. 다시 말해 기계어는 0과 1로 이루어진 명령어 모음이다.

기계어는 0과 1로 이루어져 오직 컴퓨터만을 위해 만들어진 언어이기때문에 사람이 읽으면 그 의미를 해석하기 어렵다. 그래서 등장한 저급 언어가 어샘블리어이다.

어셈블리어는 0과 1로 표현된 명령어(기계어)를 읽기 편한 형태로 번역한 언어가 바로 어셈블리어이다.

어셈블리어는 하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 직군에서 많이 사용한다.


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

고급 언어는 저급 언어로 변환되어 실행되는데, 크게 두 가지 방법으로 컴파일 방식과 인터프리트 방식으로 작동하여 변환된다.

컴파일 방식으로 작동하는 프로그래밍 언어를 컴파일 언어, 인터프리트 방식으로 작동하는 프로그래밍 언어를 인터프리터 언어라고 한다.

컴파일 언어

컴파일 언어는 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어이다. 대표적인 컴파일 언어로는 C가 있다.

컴파일 언어로 작성된 소스 코드는 코드 전체가 저급 언어로 변환되는 과정을 컴파일이라고 한다. 그리고 컴파일을 수행해주는 도구를 컴파일러라고 한다.

  • 컴파일러는 개발자가 작성한 소스 코드 전체를 쭉 훑어보며 소스 코드에 문법적인 오류는 없는지, 실행 가능한 코드인지, 실행하는 데 불필요한 코드는 없는지 등을 따지며 소스 코드를 처음부터 끝까지 저급 언어로 컴파일 한다.
    • 이 때 컴파일러가 소스 코드 내에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패한다.

컴파일이 성공적으로 수행되면 개발자가 작성한 소스 코드는 컴퓨터가 이해할 수 있는 저급 언어로 변환된다.

이렇게 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라고 한다.

인터프리터 언어

인터프리터 언어는 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어이다. 대표적인 인터프리터 언어로 Python이 있다.

소스 코드 전체가 저급 언어로 변환되는 컴파일 언어와는 달리, 인터프리터 언어는 소스 코드를 한 줄씩 한 줄씩 차례로 실행한다.

그리고 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구를 인터프리터라고 한다.

  • 인터 프리터 언어는 컴퓨터와 대화하듯 소스 코드를 한 줄씩 실행하기 때문에 소스 코드 전체를 저급 언어로 변환하는 시간을 기다릴 필요가 없다.
  • 소스 코드 내에 오류가 하나라도 있으면 컴파일이 불가능 했던 컴파일 언어와는 달리, 인터프리터 언어는 소스 코드를 한 줄씩 실행하기 때문에 소스 코드 N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 올바르게 수행된다.

컴파일을 통해 나온 결과물, 즉 목적 코드는 컴퓨터가 이해하고 실행할 수 있는 저급언어인 반면, 인터프리터 언어는 소스 코드 마지막에 이를 때까지 한 줄씩 저급 언어로 해석하며 실행해야 하기때문에 인터프리터 언어는 컴파일 언어에 비해 느리다.

마무리

  • 고급 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어이다.
  • 저급 언어는 컵퓨터가 직접 이해하고 실행할 수 있는 언어이다.
  • 저급 언어는 0과 1로 이루어진 명령어로 구성된 기계어와 사람이 읽기 편한 형태로 번역한 어셈블리어가 있다.
  • 컴파일 언어는 컴파일러에 의해 소스 코드 전체가 저급언어로 변환되어 실행되는 언어이다.
  • 인터프리터 언어는 인터프리터에 의해 소스 코드가 한 줄씩 저급 언어로 변환되어 실행되는 언어이다.

'CS' 카테고리의 다른 글

[자료구조] 스택(Stack)  (2) 2023.10.04