cosmic developer

[C++] 0. 프로그램이란 무엇인가? 본문

Programming Languages/C++

[C++] 0. 프로그램이란 무엇인가?

ti:bot 2020. 3. 7. 17:21

요즘 코로나19가 기승을 부리면서 개강이 연기되는 사태가 발생해버렸다.

그 덕분(?)인지는 모르겠으나 몇 달 전부터 하고싶었던 것들을 드디어 시작하기로 하였다.

블로그 운영과 머릿속 정리랄까,, 좋은 기회라고 생각하고 나를 거쳐간 지식들을 재정비 할 예정이다.

어쨌든 본론으로 넘어가보자.



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


프로그램의 개념 이전에 먼저 컴퓨터가 무엇인지 생각해보자.

최초의 컴퓨터에 대해 논란이 없는 것은 아니지만 보통은 에니악이라고 한다. 에니악의 역할은 무엇이었을까? 바로 계산이다.


즉, 컴퓨터는 계산기의 역할로부터 시작하여 점차 범용적인 기계로 발전해왔다.

그리고 이는 프로그램(program)이 있었기에 가능한 일이었다.


프로그램구체적으로 컴퓨터가 특정한 작업을 하기 위한 명령어들의 리스트이다.

즉, 컴퓨터를 위한 작업 지시서라고 할 수 있다.

명령어(instruction)란 CPU가 수행하는 기초적인 연산을 의미하며 이러한 명령어들의 집합이 프로그램을 구성한다.

그리고 프로그램을 개발하는 사람이 바로 프로그래머이다. 코더보다는 프로그래머가 되기를 지향하도록 하자.




#2. 프로그래밍 언어


우리가 대화를 할 때 언어를 사용하는 것 처럼 컴퓨터에게 작업을 지시할 때에도 언어가 필요하다.

그러나 컴퓨터는 오직 0과 1로 이루어진 기계어만 이해할 수 있다. 물론 초기에는 당연히 기계어로 작업하였으나 자연어를 사용하는 우리에게는 너무 어렵고 불편하다는 단점이 있다.


따라서 인간의 편의를 위해 프로그래밍 언어들이 만들어졌으며 프로그래밍 언어가 인간과 기계 사이의 연결고리가 되는 방식은 다음과 같다.


  • 인간: 프로그래밍 언어를 배워 프로그램을 작성한다.
  • 컴파일러: 작성된 프로그램을 기계어로 바꾸어준다. 통역을 담당하는 소프트웨어라고 생각하자.
  • 기계: 컴파일러가 바꾼 기계어를 이해하여 프로그램을 실행한다.

그리고 한 번쯤은 들어봤을 C, C++, Java, Python, Ruby, PHP, Go 등등 이 모든 것이 프로그래밍 언어에 해당한다.

이 정도면 전반적인 흐름은 끝이다. 비전공자라도 용어만 생소하지 내용이 절대 어렵지는 않을 것이다.

그런 의미에서 용어를 조금 더 정리해보자.


- 소스 코드 (source code): 프로그래밍 언어로 원하는 작업을 텍스트로 기술한 것

- 소스 파일 (source file): 소스 코드가 파일에 저장된 것

- 오브젝트 파일 (object file): 컴파일러가 소스 파일을 기계어로 변환하여 저장한 파일




이렇게 해서 기본 중의 아~주 기본을 담아보았다. 글을 쓰는 자체가, 특히 블로그에 글을 쓴다는 것은 처음이라서 부족한 점이 많지만 기본적인 것부터 정리하면서 익숙해지려고 한다. 이 글을 읽게 되는 당신과 나 모두 꾸준히 공부하자!