Welcome to the Matrix

001. 프로그램이란 무엇인가? 본문

Python/PythonBasic

001. 프로그램이란 무엇인가?

haru.keiko 2020. 12. 17. 14:21

프로그램이란?

우리는 종종 프로그램이라는 말을 듣곤 합니다. 

 

프로그램이란 무엇일까요?

먼저 우리나라에서 가장 많이 사용하는 다음과 네이버의 어학사전에 나온 프로그램에 대한 정의를 먼저 살펴볼게요.

 

다음 어학사전에 나오는 프로그램의 정의
다음 어학사전의 프로그램 정의
네이버 어학사전에 나오는 프로그램의 정의
네이버 어학사전의 프로그램 정의

 

어학사전에서 정의하는 프로그램의 공통적인 의미는 다음과 같습니다.

  1. 어떠한 일의 진행 계획이나 순서.
  2. 어떠한 행사(공연, 연극, 방송 등의 일)의 진행 차례나 진행 목록
  3. 어떤 문제를 해결하기 위해 컴퓨터에 자료 처리 방법과 순서를 기술한 일련의 명령문의 집합체

결국 프로그램이라는 것은 '원하는 어떠한 일을 하기 위해 계획된 방법과 절차에 의해 작성된 일련의 순서나 목록'으로 볼 수 있습니다. 

 

단순히 생각하면, 우리가 컴퓨터를 이용해 파이썬 프로그램을 작성한다는 것 또한 다르지 않습니다. 

원하는 어떠한 일을 하는 프로그램을 만들기 위해서 파이썬이 제공하는 방법과 절차에 맞게 그 내용을 일련의 순서나 목록으로 나열하는 것에 불과하죠. 

 

컴퓨터 프로그램에서 작성하는 순서나 목록 등을 '명령어'라고 합니다. 컴퓨터에게 "이거 해줘~", "저거 해줘!!"라고 명령한다고 생각하면 됩니다. 

 

프로그래밍 언어

프로그램이란 무엇인지 대략적으로 감을 잡았을겁니다. 

일단 컴퓨터에게 무엇인가 원하는걸 시킨다고 보면 되는데요, 어떻게 시켜야 할까요?

SF 영화나 소설을 보면, 단지 컴퓨터에게 "이거 해줘~ 아니다 저거 해줘~"라고 말로 혹은 손짓 등 제스처를 통해 원하는 일을 시키는 걸 볼 수 있는데요.. 참 편하죠~ ㅎㅎ

하지만, 그렇게 일을 시킬 수 있도록 하기 위해선 내부적으로 컴퓨터가 알아먹을 수 있는 컴퓨터의 언어로 명령을 내려야 합니다. 컴퓨터는 오직 컴퓨터의 언어로만 이해할 수 있기 때문이죠. 우리는 기본적으로 한국어만 알아듣는 것처럼 말이에요. 

 

컴퓨터는 오직 '0'과 '1' 밖에는 알아듣지 못합니다. 

아... 이건 뭐지?? 라는 생각이 먼저 들 것 같네요.. ^^

 

오래전 초기 컴퓨터는 정말 0과 1을 이용해서만 프로그램을 만들었습니다. 그런 시절이 있었다죠~

이렇게 0과 1로만 이루어진 것을 '머신 코드(Machine code)' 또는 '이진 코드(Binary code)'라고 합니다.

이런 이진 코드를 이용해 프로그램을 작성하는 것은 사람에겐 너무 어렵고 또 시간도 오래 걸립니다. 그래서 과거 매우 똑똑한 사람들이 '프로그래밍 언어(Programming Language)'라는 것을 고안해 냈습니다. 그리고 이 프로그래밍 언어를 컴퓨터가 알아먹을 수 있도록 이진 코드로 번역을 해 컴퓨터에게 일을 시키는 것이죠~!!

이진 코드를 사람이 바로 작성하는것 보다 아주 효율적인 방법이죠. 

 

프로그래밍 언어는 사람을 위한 언어이고, 이렇게 프로그래밍 언어로 작성된 프로그램을 '소스 코드(Source code)'라고 합니다.  

 

소스 코드를 컴퓨터가 이해할 수 있는 이진 코드로 번역을 하기 위해서 '인터프리터' 또는 '컴파일러'라는 것을 이용합니다.

 

인터프리터 vs. 컴파일러

'인터프리터''컴파일러'는 소스 코드를 컴퓨터가 이해할 수 있는 언어로 번역해 명령을 내릴 수 있도록 하는 도구입니다. 

그럼 인터프리터와 컴파일러는 어떤 차이가 있을까요?

컴파일러와 인터프리터의 차이
이미지 출처 : Interpreter vs Compiler Top 5 Best Differences (With Infographics) (educba.com)

 

컴파일러는 작성된 프로그램 언어를 실행 전에 컴퓨터가 이해할 수 있는 머신 코드(이진 코드)로 미리 변환하는 작업을 하는 프로그램입니다. 변환을 한다는 의미에는 기존의 소스 코드 전체를 컴퓨터가 이해할 수 있는 머신 코드를 파일로 생성하는 작업을 의미합니다.  

프로그램 전체를 미리 컴퓨터가 이해하는 언어로 변환을 했기 때문에, 프로그램을 실행할 경우 컴퓨터는 처음부터 끝까지 물 흐르듯 프로그램의 내용을 이해할 수 있게 되는 것이죠.

 

반면에, 인터프리터는 프로그램 언어를 머신 코드로 직접 변환하지는 않습니다. 더 정확히 말하자면, 프로그램이 실행되기 전까지는 머신 코드로 변환되지도 않습니다. 또 컴파일러와는 달리 머신 코드를 별도의 파일로 생성하지도 않습니다. 대신 중간 단계인 '바이트 코드'라는 것을 생성합니다. 

인터프리터를 사용하는 프로그램 언어의 경우 해당 프로그램이 머신 코드로 번역되어 바로 실행되는 것이 아니라 프로그램을 실행하는 시점에 먼저 바이트 코드로 번역되고, 이후 해당 프로그램 언어를 위한 '가상 머신(Virtual machine)'이라는 프로그램을 통해 머신 코드로 번역되어 실행되는 것입니다.

게다가 프로그램의 명령 단위인 한 줄씩 번역하기 때문에 컴파일러를 사용하는 프로그램 언어에 비해서 상당히 느린 편이죠.

파이썬의 경우에도 '파이썬 가상 머신(PVM - Python Virtual Machine)'이라는 프로그램이 인터프리트 된 파이썬 바이트 코드를 실행하게 됩니다. 

 

파이썬은 C/C++와 같은 언어에 비해 많이 느리다고 합니다. 

그 이유는 파이썬이 인터프리트(Interpreted) 프로그램 언어이기 때문입니다. 

 

다음은 인터프리트와 컴파일의 흐름을 보여주는 그림입니다.   

인터프리트와 컴파일 흐름의 과정
이미지 출처 : differencebetween.co

 

꽤 복잡하죠.. 

 

하지만, 뭐.. 

이런 것들에 대해 아주 자세하게 알아야만 프로그래밍을 할 수 있는 건 아닙니다. 

이런 기본 지식들이 있으면 좋겠지만, 이런 지식 하나하나가 서로 깊이 관련되어 있고 그 깊이도 매우 깊기 때문에 지금은 '아... 이런 게 있구나' 하고 다음에 필요할 때 찾아보고 이해하면 됩니다. 

 

파이썬은 이런 골치 아픈 부분들은 잘 몰라도 별 신경 쓸 것 없이 프로그래밍을 할 수 있습니다. 

 

중요한 것은, 

'프로그램'이란 이런 것이고, 

'파이썬'이란 프로그램 언어를 사용할 것이고, 

또 파이썬은 '인터프리터'를 사용해서 실행할 수 있구나~!

정도만 알아도 충분합니다.