posted by 퍼니앙스 2012. 6. 13. 06:55

- 메모리

 

   자, 앞에서는 여러분의 하드 디스크가 몇 바이트인지를 계산해 보았는데요, 이번엔 여러분의 메모리가 얼마나 되는지를 한 번 계산해보도록 하겠습니다. 우선 계산하기에 앞서서, 메모리라는 것이 정확히 어떤 것인지를 먼저 설명해야 할 것 같습니다. 메모리(Memory)라는 것은, 전기적인 신호로 무언가를 기록할 수 있는 조그만 기억장치입니다. 기억 장치라면 여러분의 하드디스크로 기억장치일 수 있죠. 하지만 하드디스크와 메모리의 차이점은, 하드디스크는 자성이 있는가 없는가 하는 물리적인 신호를 사용해 기록을 하는 반면, 메모리는 전기가 흐르는가 흐르지 않는가 하는 전기적인 신호를 사용해 기록을 합니다. 여러분이 과학시간에 배웠다 싶이, 전기의 속도는 빛의 속도만큼 빠르기 때문에, 물리적인 신호를 사용하는 하드디스크와 전기 신호를 사용하는 메모리와는 속도면에서 비교가 되질 않습니다. 메모리에는 크게 2가지의 종류가 있는데요, 컴퓨터에 관심이 있는 사람이라면 누구나 한번쯤 들어보았을 RAM과 ROM이 바로 그것입니다. RAM이란, Random Access Memory, 한글로 하면 "임의 접근 기억장치"라는 뜻이 되겠습니다. 이 말은 무슨 말이냐하면, 쉽게 말해서 "데이터를 저장하거나 지우거나 꺼내오는 것을 마음대로 할 수 있는 메모리"라는 말입니다. 아니 그럼, 마음대로 저장하지도 못하고 마음대로 지우지도 못하는 메모리가 있다는 말인가요? 네, 바로 그것이 ROM입니다. ROM은 Read Only Memory의 약자로서, 말 그대로 오직 "읽기만 가능한 기억장치"가 되겠습니다. 지금 제가 여러분에게 설명하고자 하는 것은 ROM에 관한 것이 아니라 RAM에 관한 것입니다. ROM에 대해서는 "그냥 그런게 있구나"라고만 알아두시고, 본격적으로 RAM 메모리에 관한 이야기를 해 보겠습니다.

 

   RAM메모리는 여러분이 컴퓨터를 사용하는데에 있어서, 컴퓨터의 속도를 결정짓는 가장 중요한 부분중 하나입니다. RAM 메모리의 특징을 보자면, 우선 전기적인 신호를 사용해 데이터를 기록하므로 속도가 빠르고, 또 마음대로 데이터를 기록하거나 기록된 데이터를 읽어오는 것이 자유롭기 때문에, 보통 컴퓨터에서 프로그램을 실행시킬 때 프로그램에서 필요로 하는 값들이 RAM 메모리에 저장됩니다. 특히 RAM메모리의 용량이 크면 클수록, 그만큼 많은 데이터를 기록할 수 있다는 뜻이기 때문에 더욱 많은 프로그램들이 RAM 메모리를 사용할 수 있습니다. 그래서 RAM 메모리가 큰 컴퓨터에서는 큰 컴퓨터에서는 포토샵이나 오피스 같은 커다란 프로그램을 여러개 실행시켜도 충분히 감당할 수 있는 속도를 보여주는 것입니다. RAM메모리는 작고, 정교하기 때문에 제작하기가 매우 까다롭습니다. 제작이 까다로우면 당연히 가격도 올라가게 되는데, RAM 메모리는 하드디스크보다 몇배나 더 비싸기 때문에 하드디스크처럼 "기가바이트" 단위로 용량을 측정하지 않고, "메가바이트"단위로 용량을 측정합니다. 요즈음 왠만한 컴퓨터에는 256메가바이트 내지는 512메가바이트의 RAM 메모리가 장착되어 있는데요, 7년전만 하더라도 컴퓨터의 RAM 메모리는 고작 640킬로바이트( 약 1메가바이트의 절반 )밖에 안됐습니다. 불과 7년 사이에 메모리 기술이 수백배나 발전했다는 것을 알 수 있지요. 그런데 이 RAM 메모리가 왜 그렇게 중요하냐면, "프로그램을 실행하기 위해서는 반드시 값을 기록하기 위한 공간이 필요하기 때문"입니다. 예를 들어, 오직 덧셈만 수행할 수 있는 계산기 프로그램이 있다고 가정해 봅시다. 뭐 잘 만들어진 공학 계산기는 덧셈,뺄셈,곱셈,나눗셈의 4칙 연산은 기본이고 왠만한 방정식의 풀이까지 모두 가능하지만, 그런 큰 기능을 가진 프로그램은 생각해볼 것도 없이 아주 작은 덧셈 계산기만을 생각해 보겠습니다. 우선 여러분이 그 계산기를 실행시킵니다. 그리고 5라는 숫자를 입력합니다. 이때 계산기 프로그램은, 여러분에게 입력받은 5라는 숫자를 RAM 메모리에 저장해둡니다. 그리고 여러분은 또 하나의 숫자 3을 입력합니다. 그러면 계산기는 또 3이라는 값을 RAM 메모리에 저장해둡니다. 이제 계산기는 RAM 메모리에서 여러분이 입력한 두 개의 숫자, 5와 3을 읽어와서 그것을 여러분에게 보여줍니다. 많은 기능이 있는 것도 아니고, 오직 덧셈을 하기 위해서일 뿐인데도 RAM 메모리를 이렇게 많이 사용하는 것입니다. 프로그램의 규모가 커지면, 엄청난 양의 데이터를 기록해야 할 필요가 생기는데, 그 많은 데이터들이 모두 RAM메모리에 기록됩니다.

 

   그럼 지금 왜 RAM 메모리에 대한 이야기를 하느냐? 바로 여러분이 지금부터 배울 내용이 RAM메모리와 관련이 있기 때문입니다.

 

- 변소? 아니, 변수!

 

   여러분이 제 2 장에서 "Hello, world!" 프로그램을 통해 배운 어려운 지식들을 바탕으로, 이제부터 본격적으로 C 언어의 세계에 빠져들게 됩니다. 그 첫번째가 바로 "변수"에 대해서 배우는 것입니다. 아마 컴퓨터에 관심이 많은 독자라면 아마 "변수"라는 단어를 몇번쯤은 들어 보았을 것입니다. "변수(Variable)"란 무엇인가하면, "값을 저장하기 위한 메모리상의 공간"을 말합니다. 위에서 저는 여러분에게 간단한 덧셈 계산기의 예를 보였었는데요, 그 셰산기가 사용자에게 입력받은 값을 메모리에 저장할 때 그냥 무조건 저장하는 것이 아닙니다. 우선 메모리에 값을 저장할 수 있는 공간을 만들고, 그 공간에 값을 저장하는 것이지요. 이때 "값을 저장할 수 있는 공간"이 바로 변수입니다. 덧셈 계산기 프로그램에서는, 사용자에게 입력받은 첫 번째 숫자를 저장하기 위한 변수와, 두 번째 숫자를 저장하기 위한 변수, 그리고 두 수를 더해서 나온 결과를 저장하기 위한 변수, 이렇게 3개의 변수가 사용되었던 것이지요. 별로 어렵지 않지요? 좀 더 쉽게 생각해보자면, 여러분은 메모리니 뭐니 하는 어려운 개념들은 모두 지워버리고, 그냥 "값을 저장할 수 있는 공간이 변수다"라고만 알아두셔도 충분합니다.

 

   C언어는 프로그래밍 언어이고, C 언어를 사용해서 프로그램을 만들 수 있습니다. 그래서 당연히 C 언어에서도 "변수"를 사용할 수 있는데요, 이번에는 C 언어에서 변수를 사용하는 간단한 예를 한번 보시겠습니다.

 

 1: /* Pre=processor command */

 2: #include<stdio.h>

 3:

 4: /* main() function */

 5: int main ( void )

 6: {

 7:          int v;     /* announce a variable */

 8:          v=3;      /* put a number 3 into variable 'v' */

 9:          printf( "%d\n, v );    /* print a number in variable 'v' */

10:         return 1;

11: }

 

   이 프로그램은 C 언어에서 변수를 어떻게 사용하는 가 하는 기본적인 예를 보여줍니다. 우선 2번 줄의 전처리기 명령은 printf() 함수를 사용하기 위해 stdio.h파일을 소스코드에 포함시키는 문장입니다. 그리고 5번줄은 main()함수의 정의를 시작하겠다는 표시이구요, 6번 줄부터 11번 줄까지가 main()함수의 내용입니다. 여러분이 주목해야 할 것은 7번 줄과 8번 줄인데요, 7번 줄은 "내가 앞으로 v 라는 변수를 사용할 것이다"라고 컴파일러에게 알려주는 문장입니다. 이렇게 컴파일러에게 무언가를 사용할 것이라고 알려주는 것을 "선언"이라고 한다고 앞에서 설명한 것을 기억하죠? 7번줄은 그래서 "변수 선언"이라고 부릅니다. 7번 줄에서 사용하겠다고 선언한 변수의 이름은 v인데요, 앞으로 main() 함수의 나머지 부분에서는 v라는 이름의 변수를 사용할 수 있게 됩니다. 즉, 어떤 값을 저장할 수 있는 공간을 마련해 두고, 그 공간에 v라는 이름표를 붙여둔 것이라고 생각할 수 있겠죠? 8번 줄은 7번 줄에서 선언한 v라는 변수에 3이라는 값을 집어넣는 문장입니다. 특별한 설명이 없어도, "="라는 기호를 통해서 그것을 쉽게 알아볼 수 있을 것입니다. 그리고 9번 줄에서는 printf()함수를 사용해서 v 변수에 저장되어 있는 값을 출력하는데, 앞에서 배웠던 printf() 함수의 사용법과는 좀 틀린 모양을 하고 있죠? printf() 함수의 새로운 사용법에 대해서는 뒤에 설명할 것이고, 지금 주목해야 할 것은 v라는 변수입니다. 7번 줄에서 v라는 변수를 선언했고, 8번 줄에서는 v 변수에 3이라는 값을 집어 넣었습니다. 그리고 9번 줄에서 그 변수를 사용했는데요, 이렇게 어떤 변수에 값이 들어가 있는 상태에서 그 변수를 사용한다는 것은 곧, 그 변수 안에 들어가 있는 값을 꺼내 쓰겠다는 의미입니다. 8번 줄에서 v 변수에 3을 집어 넣었으니, 9번 줄에서는 3이라는 값이 출력될 것입니다. 그리고 10번 줄에서 return 문을 만나서 main() 함수는 실행을 종료하고, 프로그램은 끝나게 됩니다.

 

   이 프로그램의 7번 줄, 즉 v 변수를 선언하는 문장을 보면 "int"라는 표시가 눈에 띕니다. 이것은 여러분에 v 변수를 사용하겠다고 컴파일러에게 선언함에 있어서, V 변수가 어떤 크기를 가질 것인가를 지정해주는 표시인데, 이것에 대해서는 바로 뒤에 2절에서 자세히 다뤄보겠습니다. 그리고 또 한가지 여러분이 알아야 할 용어가 있습니다. 지금 이 프로그램에서 7번 줄에서 변수를 선언하고, 8번 줄에서 변수에 값을 집어넣고, 9번 줄에서 변수에 들어있는 값을 꺼내서 사용했는데요, 이때 9번 줄 처럼 "어떤 변수 안에 들어있는 값을 꺼내서 사용하는 것"을 프로그래밍 용어로는 "참조(Reference)한다" 라고 말합니다. 제 경험에 비추어볼 때, C언어를 처음 배우는 사람들이 가장 많이 질문해 오는 것중 하나가 바로 "참조가 무슨 뜻이에요?"하는 질문이었는데요, 참조란 다시 말하면 어떤 변수 안에 들어있는 값을 사용하는 것을 말합니다.