여러가지 프로그래밍 언어와 컴파일러 & 어셈블러 & 인터프리터
본문 바로가기
컴퓨터공학

여러가지 프로그래밍 언어와 컴파일러 & 어셈블러 & 인터프리터

by 데이젤리 2022. 7. 20.
반응형

 컴퓨터를 통해 프로그램을 작성할 때는 프로그래밍 언어가 필요합니다.

오늘 알아볼 내용은 아래의 포스트들과 연관이 있는 내용입니다.

 

다양한 프로그래밍 언어(1)

 

다양한 프로그래밍 언어(1)

과거부터 현재까지 정말 많은 수의 프로그래밍 언어들이 사용되어 왔고, 또 현재까지도 사용되고 있습니다. 오늘은 다양한 프로그래밍 언어들을 시간순으로 정리하고 알아보도록 하겠습니다.

daisjelly.tistory.com

다양한 프로그래밍 언어(2)

 

다양한 프로그래밍 언어(2)

 지난 포스팅에서는 1950년도부터 1960년도에 개발된 다양한 프로그래밍 언어들이 개발된 순서와 간단한 특징들을 알아보았습니다. 오늘은  1970년대 이후에 개발된 대표적인 프로그래밍 언어와

daisjelly.tistory.com

 

 

컴파일러 & 어셈블러 & 인터프리터

 

앞선 포스팅에서 알아본 내용인 C, C++, JAVA 등은 사람이 이해하기 쉬운 고수준 언어입니다.

이외에도 기계가 이해하기 쉬운 기계어와 어셈블리어를 통틀어 저수준 언어라고 합니다. 

 

오늘 알아볼 내용은 아래와 같습니다.

 

   <목차>

  1. 기계어
  2. 어셈블리어
  3. 기계어와 어셈블리어의 관계
  4. 저수준 언어
  5. 고수준 언어
  6. 어셈블러
  7. 컴파일러
  8. 인터프리터

 

1. 기계어

 

 기계어는 CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어를 통틀어 말하며, 연산자와 피연산자로 구성되어 있습니다. 

기계어는 컴퓨터의 CPU에서 명령을 수행하기 위해서 꼭 필요합니다.

또 CPU의 종류에 따라 각기 고유한 명령어로 구성되어 있습니다. 

 

기계어 : 비트 값 0과 1로 그대로 표기

연산자 : 프로세서가 처리할 작업을 지정해주는 역할

피연산자 : 이 작업에서 처리할 목적물

 

기계어의 길이는 일반적으로 컴퓨터의 워드 크기와 일치합니다. 

이때 일반적으로 컴퓨터의 워드 크기는 32비트, 64비트 혹은 그 이상이 됩니다. 

그렇다면 이때 기계어 명령어의 크기도 32비트 혹은 64비트가 됩니다.

 

프로세서의 연산자의 종류도 수백 가지일 수 있으며, 피연산자의 수도 2개 이상이 될 수 있습니다.

 

 

2. 어셈블리어

 

기계어는 실제로 컴퓨터의 CPU가 읽어서 실행할 수 있는 0과 1로 이루어진 명령어의 조합입니다.

이때의 각 명령어에 대하여 사람이 알아보기 쉬운 니모닉 기호를 정해 사람이 좀 더 쉽게 컴퓨터의 행동을 제어할 수 있도록 한 것이 어셈블리어 또는 어셈블러 언어라 불리는 언어입니다.

 

어셈블리어 : 컴퓨터 고유의 기계어 명령을 사람이 해독할 수 있도록 문자화하거나 기호화한 형태

 

 

3. 기계어와 어셈블리어의 관계

 

기계어를 사용할 때와 비교해서 어셈블리어를 사용하면 비교적 프로그램의 작성이 용이해지는 것을 볼 수 있습니다.

이는 어셈블리어가 기계어 명령어를 사람이 쉽게 해독할 수 있도록 문자화하거나, 기호화한 형태의 명령어이기 때문입니다.

 

기계어는 0과 1로 이루어진 비트열입니다.

이에 비하여 어셈블리어는 명령어를 사람이 쉽게 이해할 수 있는 형태로 바꾸어 놓은 것입니다. 

이를 통해 기계어와 어셈블리어가 1:1 매핑 관계에 있음을 알 수 있습니다. 

 

4. 저수준 언어

 

저수준 언어는 기계어와 어셈블리어를 이르는 말입니다. 

 

기계어 : 비트 값 0과 1로 그대로 표기 / 연산자와 피연산자로 구성

어셈블리어 : 컴퓨터 고유의 기계어 명령을 사람이 해독할 수 있도록 문자화하거나 기호화한 형태

 

 

5. 고수준 언어

 

고수준 언어는 프로그램 작성을 쉽게 할 수 있도록 명령어를 일상적으로 사용하는 문장에 가까운 형태로 만들어 코딩 부분이 훨씬 줄어들 수 있게 만들어져 있다. 

 

아래는 고수준 언어인 C언어 프로그램의 일부분입니다. 

int x = 0, y = 0;

printf("두 정수를 입력해주세요 : ", &x, &y);
scanf("%d %d", &x, &y);

고수준 언어는 실행할 작업의 목적이나 성격에 따라 다양한 언어가 사용되고 있습니다. 

이러한 언어들은 그동안의 기술 발전과 함께 상당히 진화된 형태를 보여주고 있습니다.

 

절차적 언어 : 포트란, 코볼, C, 파스칼, 베이직 등

객체지향 언어 : C++, 자바, 파이썬 등

 

또 자연어에 가까운 4세대 언어로 SQL, RPG 등이 있고, 인공지능 등 특수목적 언어에는 리스프, 프롤로그, 스몰토크 등이 있습니다.

 

 

6. 어셈블러

 

어셈블리 프로그램은 실행될 때 기계어로 번역되는 과정을 걸쳐야지만 컴퓨터에서 실행이 가능합니다. 

어셈블리어가 기계어로 번역될 때는 3. 기계어와 어셈블리어의 관계에서 본 것처럼 1:1 매핑 관계로 번역됩니다. 

 

즉, 어셈블리 명령어 하나가 기계어 명령어 하나로 번역되는 것입니다. 

 

어셈블러 : 어셈블리어를 기계어로 번역해주는 소프트웨어

 

 

7. 컴파일러

 

고수준 언어는 작성하기 쉬우며 고수준 언어로 작성하면 모든 CPU 상에서 사용할 수 있다는 장점이 있습니다.

 

기계어는 컴퓨터가 직접 해석하고, 처리할 수 있는 언어이고, 고수준 언어는 사람이 쉽게 사용할 수 있도록 만들어진 언어입니다. 

컴퓨터는 기계어 이외의 다른 언어로 작성된 모든 프로그램을 기계어로 번역해야만 프로그램의 실행이 가능합니다. 

 

고수준 언어로 작성된 프로그램을 번역하는 두 가지 방식에는 컴파일러, 인터프리터가 있습니다.

 

컴파일러 : 고수준 언어로 작성된 소스 프로그램을 기계어로 번역하여 그 결과를 오브젝트 코드라는 실행할 수 있는 프로그램으로 저장

 

.exe 혹은 .com의 확장자를 가진 파일이 오브젝트 코드에 해당합니다.

프로그램이 실행될 때는 번역이 필요 없기에 실행 속도가 빠르며 기계어는 사람의 해독이 어렵기 때문에 소스 프로그램의 보안에 좋다는 장점이 있습니다.

 

 

8. 인터프리터

 

인터프리터 : 실행할 때마다 소스 프로그램을 한 문장 씩 기계어로 해석해 바로 실행하는 방식

 

인터프리터 방식 언어의 대표적인 예로 베이직을 들 수 있습니다.

또 웹페이지에서 많이 사용하는 스크립트 언어들도 인터프리터 방식을 따르고 있습니다.

 

인터프리터 방식은 속도가 느리지만 느린 속도가 문제가 되지 않는 분야에서 많이 사용됩니다.

인터프리터 방식의 장점으로 개발, 업데이트가 쉽다는 점이 있습니다.

 

장점 : 개발, 업데이트가 쉽다

단점 : 느린 속도

반응형

댓글