1. 컴퓨터언어 이야기
1.1.컴퓨터언어와 언어 프로그램
1.1.1.인간 세상의 언어와 컴퓨터 세계의 언어는 같습니다
언어는 약속입니다.
사람들의 세계에서 언어는 두 사람 이상의 사이에서 의사소통을 위해서 정한 약속을 말합니다. 예를 들어서 우리가 먹을 수 있는 식물 중의 하나를 '사과'라고 약속하고 한 사람이 '사과'를 표시하면 다른 사람은 '사과'를 생각해낼 수 있습니다. 이때 '사과'를 표시하기 위해서는 여러 가지 방법을 사용합니다. 그리고 그 방법에 따라서 언어의 종류는 여러 가지로 구분됩니다.
가장 많이 사용하는 것은 입의 발성능력을 이용한 '말'입니다. '사과'라고 발음하는 순간 상대방은 이미 약속된 내용에 따라서 '사과'라는 말이 가리키는 식물을 떠올릴 수 있습니다. 언어라는 낱말의 의미가 곧 '말'입니다. 말이야말로 가장 기본이 되는 언어표현방법이기 때문입니다.
언어는 소리언어, 문자언어, 몸짓언어, 기호언어 등으로 구분할 수 있습니다.
말 외에도 몸짓이나 글자, 기호, 도구를 이용할 수 있습니다. 즉 약속된 몸짓으로 사과를 표현할 수도 있고, 그림을 그려서 사과를 표현할 수도 있으며, '사과'라는 글씨를 써서 사과를 나타낼 수도 있습니다. 또는 새끼줄의 매듭 모양과 매듭의 수로 사과를 나타낼 수도 있습니다. 전파를 이용한 모스부호나 수신호, 깃발신호를 이용할 수도 있고, 봉화처럼 연기를 이용해서 의사를 전달할 수도 있습니다. 이처럼 언어의 종류는 여러 가지가 있습니다. '사과'의 개념에 대한 약속은 똑 같지만 '사과'를 상대방에게 알려주기 위해서 사용하는 언어의 종류는 똑 같지 않은 것입니다.
사람들은 환경적 특성에 따라서 가장 경제적이고 적절한 표현방법으로 '사과'를 표현합니다. 말은 기본적인 언어지만 말을 사용할 수 없는 곳이 많습니다. 인질구출 임무를 맡은 대원이 말을 사용할 수는 없습니다. 수신호를 이용해야 적에게 안들키고 작전을 수행할 수 있습니다. 농아들은 문자나 수화를 이용합니다. 자동차경주장에서는 깃발을 사용합니다. 거리가 먼 곳끼리는 봉화를 이용하거나 빛의 반사를 이용합니다.
문자언어는 프로그램의 차이에 의해 다시 한글, 영문자, 한자 등으로 구분됩니다.
말언어, 손짓언어, 몸짓언어, 기호언어 등 다양한 종류의 언어가 있지만 이들 언어는 나름대로의 규칙과 체계가 있습니다. 즉 프로그램화 되어있으며 사람들은 이 프로그램의 체계에 맞추어서 각종 약속을 표현하고 있습니다. 아무렇게나 말하고 아무 글씨나 쓰는 것이 아닙니다. 약속된 내용에 따라서 말하고 글씨를 쓰고 신호를 주고받는 것입니다.
이들 프로그램의 내용은 시대와 지역에 따라서 다릅니다. 문자언어의 경우 지역에 따라서 한글, 로마자, 한자, 영문자 등으로 다양하며 이들 각 문자는 시대에 따라서 조금씩 문법체계나 표기방법이 다릅니다. 즉 프로그램의 내용이 다른 것입니다.
우리나라의 경우 가림토문자, 한자, 향찰, 이두 등을 사용해왔으며 현재는 한글을 사용하고 있습니다. 한글 역시 고어에 사용하던 문자들이 현재는 사용되지 않고 있으며 표기방법이나 문법도 많이 변한 상태입니다.
컴퓨터언어는 컴퓨터와의 의사소통을 위한 약속입니다
인간의 언어와 마찬가지로 컴퓨터언어 역시 둘 이상의 사이에서 의사소통을 하기 위한 약속입니다. 이때 둘 이상의 사이란 컴퓨터나 컴퓨터의 각 부품, 인간 사이의 의사소통을 위한 약속입니다. 즉 어떤 인간이 내리는 명령을 컴퓨터가 이해할 수 있거나 갑이라는 컴퓨터가 보내온 신호를 을이라는 컴퓨터가 이해할 수 있도록 정한 약속이 컴퓨터언어입니다.
인간이 만든 컴퓨터이기 때문에 컴퓨터언어 역시 인간 세상의 언어와 같은 구조를 가지고 있습니다. 문법체계 역시 인간이 쓰는 언어와 같습니다. 표현방법에 따라서 언어의 종류도 여러 가지로 구분되며 각 언어는 다시 프로그램 내용에 따라서 여러 가지의 언어 프로그램으로 분류됩니다.
컴퓨터언어의 종류는 기본이라고 할 수 있는 기계어가 있으며 C++언어, C언어, BASIC, PASCAL, JAVA 등 수 십 종류가 있습니다. 이들 언어 중에서 앞으로 우리가 이 책을 통해서 배우고자 하는 언어는 C++언어입니다.
현재 우리는 21세기의 대한민국에서 살고 있습니다. 그리고 한국말을 사용하며 한글을 이용합니다. 즉 소리언어를 사용하며 언어 프로그램의 내용은 한국어입니다. 그리고 문자언어도 함께 사용하는데 문자 언어 프로그램으로 사용하는 것은 한글입니다. 때로는 영어나 한자 등을 함께 사용하기도 합니다.
그리고 이제 컴퓨터언어를 하나 더 배우려고 합니다. 그 언어의 종류는 C++언어이고 C++언어를 표현하기 위한 프로그램으로는 볼랜드C++이라는 프로그램을 사용할 예정입니다. 그럼 본격적인 언어의 세계로 출발하겠습니다.
**요약: 인간 세상에서 언어가 인간들끼리의 의사소통을 위한 약속인 것처럼 컴퓨터언어는 컴퓨터와의 의사소통을 위한 약속입니다
1.1.2.컴퓨터언어와 컴퓨터언어 프로그램의 차이는?
언어를 실제로 사용하기 위한 실천방안의 체계가 언어 프로그램입니다.
인간 세상의 언어를 통해서 예를 든 것처럼 언어와 언어 프로그램은 차이가 있습니다. 언어는 약속에 불과합니다. 실제로 언어를 사용하기 위해서는 체계화된 프로그램이 필요합니다.
예를 들어서 어떤 식물 중 하나를 '사과'라고 부르기로 하자고 약속했습니다. 그러나 혼자만 약속해서는 안됩니다. 사회 구성원이 같이 약속을 정하고 이 약속을 실천하기 위한 체계(=프로그램)가 필요합니다. 예를 들어서 입으로 '사과'라고 발음하자고 하거나 '애플'이라고 발음하자고 정해야 합니다. 또는 손짓이나 문자, 신호를 이용해서 사과를 나타낼 수도 있습니다.
이처럼 우선적으로 발성방법을 이용할 것인지, 문자나 신호를 이용할 것인지를 정해야 합니다. 또 발성방법을 이용한다면 음을 구성하는 음소로는 어떤 것들을 사용할 것이며, 각 낱말의 발음은 어떻게 결합되는지, 품사는 어떤 것이 있으며 주어 동사의 순서는 어떻게 되는지를 체계 있게 정해야 합니다. 이 내용이 곧 프로그램입니다.
다시 한 번 정리해 말씀드리는데 언어는 표현방법에 따라서 소리언어, 몸짓언어, 문자언어 등으로 구분되며 소리언어는 다시 프로그램의 내용에 따라서 한국어 프로그램, 영어 프로그램, 중국어 프로그램 등으로 구분됩니다. 문자언어를 사용한다면 한글 프로그램, 알파벳 프로그램, 한자 프로그램으로 구분할 수 있습니다.
앞서 한 이야기를 이처럼 다시 반복하는 이유는 컴퓨터언어와 컴퓨터언어 프로그램의 차이를 정확하게 이해해야 하기 때문입니다.
컴퓨터언어는 약속이며, 컴퓨터언어 프로그램은 약속의 실천방법론입니다
컴퓨터에서 사용하는 컴퓨터언어와 컴퓨터언어 프로그램은 다릅니다. C++언어와 C++언어 프로그램 역시 분명 다릅니다. 그러나 한국어 프로그램을 한국어라고 말하는 것처럼 실제로는 C++언어 프로그램을 C++언어라고 말하는 경우가 많습니다. 다시 한 번 분명히 말하지만 C++언어와 C++언어 프로그램은 다릅니다.
약속에 해당하는 언어와 실천 방법에 속하는 프로그램의 차이를 명확하게 구분할 필요가 있습니다. 우리가 약속이 있다면 약속을 실천하기 위한 방법론이 필요합니다.
은행에서 돈을 찾기 위해서는 약속내용을 이해하고 있는 직원이나 현금지급기를 이용해야 합니다
은행에서 돈을 찾겠다고 말한 뒤에 계좌번호와 비밀번호를 입력하고 금액을 말하면 돈을 주기로 약속을 정했다고 합시다. 약속은 그렇게 되어 있지만 이를 실천하기 위해서는 그 약속내용을 이해하고 있는 여직원이 창구에서 돈을 주고받으면서 통장을 정리해주어야 합니다. 또는 약속내용이 프로그램된 현금지급기를 이용해서 돈을 뺄 수도 있습니다. 이때 입출금의 약속 내용을 이해하고 실제로 돈을 내주는 현금지급기나 창구의 여직원에 해당하는 것이 언어프로그램입니다.
따라서 사람들은 두 가지를 배워야 합니다. 비밀번호를 알려주면 돈을 찾을 수 있다는 약속도 알아야 하지만 현금지급기의 사용방법도 알아야 합니다. 그래야만 현금지급기를 이용해서 돈을 찾을 수 있습니다.
프로그램을 만들기 위해서는 컴퓨터언어와 컴퓨터언어 프로그램을 둘 다 배워야 합니다
마찬가지로 컴퓨터언어 역시 약속에 해당할 뿐이며 실제로 이 언어를 활용해서 컴퓨터를 제어하거나 프로그램을 만들 때는 언어프로그램을 이용합니다. 그러나 돈을 찾기 위해서 약속내용과 현금지급기 사용방법을 같이 배워야 하는 것과 마찬가지로 사람들은 프로그램을 만들기 위해서 C++언어라는 약속과 C++언어 프로그램 사용법 두 가지를 모두 배워야 합니다.
이 책에서는 C++언어 문법 중에서도 공통적인 문법과 C++언어의 기본적인 특징에 대해서 설명합니다. 그리고 C++언어 프로그램으로는 볼랜드C++을 이용합니다. 물론 C++언어 프로그램의 사용법도 간단하게 다룹니다.
**요약: 컴퓨터언어는 약속에 해당하고, 컴퓨터언어 프로그램은 컴퓨터언어의 약속 내용에 따라서 컴퓨터를 제어하기 위하여 사용하는 프로그램입니다.
1.1.3.컴파일러가 하는 일은?
기계가 이해할 수 있는 언어는 기계어뿐입니다.
기본적으로 한국사람이 이해할 수 있는 언어는 한국어뿐입니다. 미국사람과 대화하기 위해서는 직접 대화가 가능할 정도로 영어를 배워야 합니다. 또는 통역하는 사람을 이용해 대화를 나눌 수 있습니다.
컴퓨터라는 기계는 본질이 기계이므로 이해할 수 있는 언어도 기계어밖에 모릅니다. 기계어라는 것은 무엇인가? 아날로그 신호나 디지털 신호로 이루어진 전기적인 신호체계입니다. 컴퓨터의 경우에는 0과 1로 이루어진 전기신호의 체계가 기계어입니다.
왜 0과 1로 이루어진 전기신호를 기계어로 사용하는가? 컴퓨터는 전기로 움직이는데 전기를 통해서 할 수 있는 켬(On)과 끔(Off)밖에 없기 때문입니다. 즉 전기를 부품이나 소자에 흐르게 하거나 흐르지 못하게 하는 두 가지 동작 중의 하나만을 할 수 있습니다. 결국 전자기기는 모두 전기 흐름의 조합을 통해서 기계적인 동작이 이루어집니다.
기계어만 아는 기계가 사람 말을 알아듣기 위해서는 통역 장치가 필요합니다.
문제는 사람이 기계어를 모른다는 점입니다. 미국인이 한국어를 모르는 것과 마찬가지입니다.사람은 0과 1로 이루어진 언어체계에 익숙하지 않습니다.
그렇다면 사람이 내리는 명령을 컴퓨터는 어떻게 알아들을 수가 있습니까? 두 가지 방법 중의 하나를 선택해야 합니다. 컴퓨터가 인간의 언어를 알아들을 수 있을 정도로 컴퓨터를 학습시키거나 컴퓨터와 인간 사이에 통역을 해주는 장치를 이용하는 일입니다.
물론 컴퓨터가 인간의 언어를 알아들을 수 있도록 학습시키는 일은 현재로서는 불가능한 일입니다. 따라서 유일한 대안은 컴퓨터언어인 기계어와 인간 세상의 언어를 통역해주는 장치를 이용하는 것입니다.
사람말을 기계어로 통역해주는 프로그램을 컴파일러 프로그램이라고 합니다
사람의 말을 기계어로 통역해주는 장치는 여러 종류가 있습니다. 옛날에 사용하던 천공기라는 장치도 일종의 통역장치로 볼 수 있습니다. 그러나 요즘은 더욱 세련된 컴파일러(Compiler)라는 프로그램을 사용합니다.
'Compile'이라는 낱말의 뜻은 '번역하다'입니다. 따라서 '컴파일러(Compiler)'는 '통역관'의 의미를 지닌 말입니다.
우리가 보통 컴퓨터언어 프로그램이라고 말하는 터보C, 볼랜드C++, 비주얼C++, 비주얼베이직, 델파이, 터보어셈블러 등은 다른 말로 컴파일러라고 부릅니다. 그 까닭은 컴퓨터언어 프로그램의 가장 중요한 기능이 컴퓨터언어를 기계어로 번역하는 기능이기 때문입니다. 그래서 보통 컴퓨터언어 프로그램이라고 부르는 프로그램을 컴파일러 프로그램이라고도 부르는 것입니다.
컴파일러 프로그램이 곧 컴퓨터언어 프로그램입니다
우리가 보통 사용하는 컴퓨터언어는 기계가 이해할 수 있는 언어가 아닙니다. 사람들이 이해할 수 있는 언어들입니다. 즉 기계어가 아니고 인간어에 해당합니다. 따라서 C++언어의 문법대로 프로그램을 작성한 다음에 컴퓨터보고 실행하라고 명령을 내려도 컴퓨터는 알아듣지 못합니다.
C++언어로 작성한 내용을 기계가 이해할 수 있는 기계어로 번역해서 명령을 내려야만 기계가 알아듣고 명령을 실행할 수 있습니다. 따라서 C++언어로 만든 문장을 기계어로 번역해주는 프로그램이 필수적인데, 이들 컴퓨터언어로 만든 프로그램을 기계어로 번역해주는 프로그램을 컴파일러 프로그램이라고 합니다. 다른 말로 컴퓨터언어 프로그램이라고 합니다.
컴퓨터언어 프로그램은 프로그램을 만드는 프로그램입니다
이 때문에 컴퓨터언어 프로그램은 '컴퓨터에서 돌아가는 프로그램을 만드는 도구'라고 할 수 있습니다. 언어프로그램 역시 게임이나 워드프로세서처럼 컴퓨터에서 돌아가는 프로그램의 한 종류에 불과합니다. 다만 게임이 소비성 프로그램이라면 컴퓨터언어 프로그램은 도구로서 기능이 강한 프로그램이라고 보면 됩니다. 톱, 망치 등의 도구나 공작기계를 이용하면 젓가락, 열쇠, 나사, 머리핀 등의 일상 용품에서부터 모형총 등의 오락기구, 심지어는 새로운 망치나 톱, 공작기계 등의 도구를 만들 수 있는 것과 마찬가지입니다.
우리가 사용하는 모든 컴퓨터 프로그램은 컴퓨터언어를 이용해서 만든다고 생각하시면 됩니다. 물론 새로운 컴퓨터언어 프로그램 역시 이전의 컴퓨터언어 프로그램을 이용해서 만들어집니다. 마치 망치를 이용해서 새로운 망치를 만드는 것처럼 말입니다. 그래서 컴퓨터언어프로그램을 프로그램을 만드는 프로그램이라고 부르는 겁니다.
**요약: 컴파일러는 사람이 이해할 수 있는 컴퓨터언어를 기계가 이해할 수 있는 기계어로 통역해주는 프로그램입니다. 일반적으로 컴퓨터언어 프로그램이라 부르는 터보C, 볼랜드C++, 비주얼베이직 등이 컴파일러 프로그램으로, 컴퓨터언어 프로그램을 이용해서
컴퓨터 프로그램을 만듭니다.
1.1.4.컴퓨터언어의 종류
컴퓨터언어 프로그램은 지원하는 컴퓨터언어의 종류에 의해 구분됩니다
컴퓨터프로그램의 종류는 수 천 가지로 구분됩니다. 운영체체, 게임, 글틀(wordprocesser), 데이터베이스, 스프레드시트, 그래픽, 통신, 컴퓨터언어 등으로 매우 다양하게 구분됩니다. 또 이들 중 하나인 게임은 다시 롤플레잉, 아케이드, 시뮬레이션, 어드벤처, 퍼즐 등으로 구분되며, 아케이드 게임이 다시 슈팅, 액션, 격투기, 미로찾기 등의 여러 종류로 분류됩니다. 슈팅 게임 또 다시 분류기준에 따라 2D/3D슈팅, 종/횡스크롤슈팅, 사냥게임, 비행기슈팅 등의 수십 가지 슈팅게임으로 분류됩니다.
자신에게 맞는 컴퓨터언어 프로그램을 선택해야 합니다
컴퓨터언어 프로그램 역시 수 백 가지로 구분됩니다. 우선 언어의 특성에 따라서 어떤 언어를 지원하는 프로그램인가로 구분됩니다. 우리가 사용하는 도구의 종류가 망치 하나로 끝나지 않고 톱, 가위, 끌과 같이 여러 종류인 것처럼 컴퓨터언어 역시 여러 종류일 수밖에 없습니다. 그리고 망치나 톱, 가위, 끌이 나름대로의 장단점이 있는 것처럼 컴퓨터언어도 각자의 장단점이 있습니다.
망치는 물건을 깨거나 못을 박을 때는 편하지만 종이를 자르는 일에는 적합하지 않습니다. 종이를 자르는 일에는 가위가 적합합니다. 그리고 나무를 자를 때는 톱이 칼이나 가위보다 훨씬 좋습니다. 또한 망치나 톱은 사용하기 편하고 누구나 쉽게 사용법을 익힐 수 있는 반면에 정교한 제품생산에는 적합하지 않습니다. 이에 비해 공작기계는 사용법을 배우기 까다로운 반면에 정교한 제품생산에 적합한 도구입니다.
도구의 종류가 다양한 것처럼 컴퓨터언어도 다양합니다. 그리고 이들 언어의 장단점을 비교해본 뒤에 자신이 만들고자 하는 프로그램을 경제적으로 만들 수 있는 언어를 배웁니다.
컴퓨터언어 중에서 가장 유연한 언어는 C와 C++언어입니다.
언어의 종류로 가장 많이 사용하는 것은 C, C++, PASCAL, BASIC, 어셈블리어, 코볼, 포트란, 자바 등이 있습니다. 물론 이들 언어 외에도 더 많은 컴퓨터언어가 있습니다. 그러나 우리가 외국어로 영어, 불어, 독일어, 중국어 등을 주로 배우는 것처럼 사람들이 주로 사용하는 언어는 이들 몇 개 언어에 몰려있습니다.
어셈블리어는 가장 강력하지만 배우기 가장 어렵습니다
이중 어셈블리어는 가장 정교하게 컴퓨터를 제어할 수 있는 프로그램을 짤 수 있으나 사용법을 익히기가 매우 어렵습니다. 어셈블리어는 기계어와 가장 비슷한 구조를 가지고 있는 언어이기 때문에 가장 강력한 제어가 가능하지만 배우기가 가장 어렵습니다.
반면 BASIC은 사용법을 배우기는 쉽지만 정교하게 컴퓨터를 제어하기 어렵습니다. 쉽게 말하면 뛰어난 기능을 구현하기가 어렵다는 말입니다.
그래서 그동안 많은 사람들이 파스칼이나 C를 배워 사용했습니다. 특히 C언어는 언어를 배우고자 하는 모든 사람이 가장 배우고 싶어하는 언어입니다. 그만큼 C언어가 가진 장점이 많기 때문입니다. C언어는 기능이 좀더 개선되어 C++언어로 발전했습니다. C++언어는 C언어가 가진 모든 기능을 그대로 수용하면서 기존의 C언어보다 좀더 나은 기능을 가지고 있습니다.
파스칼은 터보파스칼에 이어 델파이가 나오면서 다시 인기를 끌고 있습니다
파스칼은 C언어보다는 배우기가 좀더 쉬우면서도 기능면인 측면에서도 C언어와 크게 차이가 없었기 때문에 한동안 큰 인기를 누렸습니다. 특히 터보파스칼이라는 프로그램이 큰 인기를 끌었습니다. 그러나 C언어의 인기가 점차 높아지면서 위세가 축소되다가 델파이라는 컴파일러가 등장하면서 다시 큰 인기를 얻기 시작했습니다.
자바는 사실 언어로 개발된 것이 아니고 스크립트의 성격이 강하게 적용된 언어입니다. 그러나 인터넷의 보급과 더불어 크게 인기를 끌면서 위상이 높아져 언어로서 위치를 갖추게 되었습니다.
이처럼 컴퓨터언어는 컴퓨팅환경과 시장의 흐름, 역사적 필요성에 따라서 흥망성쇠를 달리합니다. 이는 인간 세상의 언어가 나라의 힘에 비례하여 세력이 커지는 것과 같습니다. 이는 그리스어, 로마어가 힘을 얻다가 이태리어 스페인어 프랑스어 독일어를 거쳐 영어가 국제어의 표준이 된 것과 같습니다.
C언어나 C++언어를 인간 세계의 언어와 비교하자면 영어와 같다고 볼 수 있습니다. 태어난지는 오래되지 않았지만 가장 많은 분야에서 가장 많은 프로그래머가 배우고 사용하는 언어이기 때문입니다.
**요약: 컴퓨터언어에는 C, C++, PASCAL, BASIC, 어셈블리어, 코볼, 포트란, 자바 등 수십 종류가 있는데 각기 특성이 다르기 때문에 자신의 목적에 가장 적합한 언어를 선택해야 합니다. C언어와 C++언어는 인간세상의 영어와 마찬가지로 가장 보편적으로 사용하는 언어로 유연하다는 점이 특징입니다.