프로그래밍 언어 공부하기2

그렇다면 프로그램은 어떻게 작동하는가?

컴퓨터가 실제로 수행할 수 있는 명령어는 기계어 뿐이다. 기계어는 0과 1로 이루어진 언어인데, 현재 기계어로 코딩이 가능한 사람은 없다고 봐도 좋다. 역사적으로도 몇명 없었고. 컴퓨터에게 일을 시키려면 기계어로 집어넣어야 하는데 사람은 기계어를 직접 쓸 수 없으니까 사람이 쓴 언어를 기계어로 번역하는 프로그램이 필요하다. 그 프로그램은 어떻게 만들었냐고? 그 프로그램도 기계어를 번역하는 다른 프로그램으로 만든 것이다. 그런식이면 최초에 기계어로 번역하는 프로그램은 어떻게 만들어졌냐고 물어볼 수 있을텐데, 당연히 그때는 프로그램을 기계어로 만들었었다. 옛날에는 기계어도 간단했기 때문에 기계어를 직접 사람이 코딩할 수 있었고, 점점 컴퓨터가 복잡해지면서 인간의 능력으로는 쫒아가기 힘들어지다보니 인간이 알아볼 수 있는 언어와 기계어를 번역하는 프로그램을 만들게 된 것이다. 그런 프로그램도 처음에는 기계어를 이용해서 만들었지만, 차츰 기술이 발전하면서 그런 프로그램을 번역하는 프로그램을 만드는데도 기계어가 아니라 좀 더 높은 수준의 언어를 사용할 수 있게 되었다. 이 글은 컴퓨터 역사에 관한 글은 아니므로 여기서 넘어가도록 하자.

컴퓨터 프로그램은 그럼 어떻게 만들어야 할까? 앞에서 설명했듯이 컴퓨터가 할 수 있는 것은 사칙연산과 조건판단, 무한반복 뿐이다. 즉, 우리가 컴퓨터에게 시키려는 구체적인 일을 이 세가지 작업의 조합으로 잘게 쪼개야 한다. 그리고 그렇게 쪼개고 나면 세가지 작업을 어떤 순서로, 어떤 방향으로 실행시키는지가 나오는데 그것을 “순서도”라고 한다. 그리고 그것을 구체적으로 어떤 순서로 쪼개서 실행시키는지를 “알고리즘”이라고 한다. 프로그램을 만들기 위해서는 알고리즘을 잘 사용하고, 순서도를 잘 그리는 것이 중요하다.

순서도는 어떻게 그려야 할 것인가? 인터넷을 검색해 보면 순서도를 그리는데 사용하는 도형들이 나온다. 직사각형, 마름모꼴, 번개표시, 물결표시, 원기둥 등등. 그런 표준 도형을 사용하면 내가 그린 순서도를 다른 사람이 알아보기 쉽게 그리는데 도움이 된다.

먼저, 프로그램이 뭘 하는지를 적는다. 이렇게 한 문장만 적어놓고 보면 앞서 얘기한 세가지 작업, 사칙연산, 조건판단, 무한반복의 조합으로 써 있을리가 없다. 물론 이미 그렇게 써 있다면 끝나는 것이겠지만. 프로그램이 이 세가지 기본 작업을 통해서 일을 처리하려면, 프로그램이 하는 일을 더 잘게 세분해야 한다. 어떤 단계를 거쳐서 문제를 풀게 되는지, 각 단계마다 어떤 작업을 해야 하는지 등등. 이것을 아주 상세하게 쪼개서 최종적으로 저 세가지 기본 작업의 조합으로 써 있게 되면 순서도 작성이 끝나는 것이다.

세가지 기본 작업의 덩어리를 함수(function)라고 부른다. 언어나 동네에 따라서는 서브루틴, 메소드 같은 다른 용어를 쓰기도 하지만 아무튼 다 그게 그거다. 어떤 함수는 저 세가지 기본 작업들로 이루어진 덩어리인데, 그 함수를 실행시키면 한 단계의 작업을 처리한다. 이 때, 입력을 받아서 출력을 내놓는 것이다. 그리고 커다란 프로그램은 함수 여러개를 모아서 작업을 처리한다. 함수는 그 내부에서 세가지 기본 작업 뿐만 아니라 다른 함수를 불러와서 쓸 수도 있다. 심지어 자기 자신을 불러와서 사용할 수도 있다.

결과적으로 프로그램을 만든다는 것은 프로그램 전체가 해야 할 일을 여러개의 함수로 쪼개고, 각 함수를 한줄씩 한줄씩 채워 넣는다는 것이 된다.

그렇다면, 어떻게 쪼개야 하는가?

예를 들어, 소설을 쓴다고 하면, 소설은 짧게는 글자로 이루어진 긴 문자열이지만, 거기에는 의미가 담겨있다. 첫 문장과 결말을 안다고 해서 소설을 다 읽은게 아니듯이, 프로그램도 무슨 일을 할지 정했다고 해서 일이 끝나지는 않는다. 장과 절을 나누고, 절은 문단으로 나누고, 문단은 문장으로 나누고, 문장은 단어로 이루어지게 된다. 마찬가지로 컴퓨터 프로그램도 각각의 의미있는 단어를 순서대로 늘어놓아서 컴퓨터가 작동하도록 하는 것이다.

(이어서…)

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑

%d 블로거가 이것을 좋아합니다: