똑똑한 저장고, 변수 이야기: 내 컴퓨터 속 숨겨진 정리정돈 비법
안녕하세요! 혹시 여러분의 방은 늘 깨끗하신가요? 옷이며 책이며 물건들이 제자리에 착착 정리되어 있다면 얼마나 찾기 쉽고 보기 좋을까요? 컴퓨터 속 세상도 마찬가지랍니다. 우리가 사용하는 수많은 정보들, 예를 들어 여러분이 지금 보고 계신 이 글자들, 사진, 동영상 같은 데이터들은 컴퓨터의 기억 장치, 바로 ‘메모리’라는 특별한 공간에 보관돼요. 그런데 이 메모리는 마치 우리 방의 서랍이나 옷장처럼 한정된 공간이라서, 물건들을 아무렇게나 넣어두면 나중에 찾기도 어렵고 금방 꽉 차버리겠죠?
여기, 컴퓨터 속 데이터를 아주 깔끔하고 효율적으로 정리하는 특별한 방법이 있답니다. 바로 오늘 이야기의 주인공, ‘변수’라는 개념이에요. 변수는 마치 우리 방의 ‘이름표 붙은 상자’와 같아요. 우리는 이 상자에 어떤 종류의 물건(데이터)을 담을 건지 미리 정해두고, 상자 겉에는 찾기 쉬운 이름표를 붙여놓는 거죠.
예를 들어볼까요? 여러분이 가장 좋아하는 숫자가 ‘7’이라고 해볼게요. 컴퓨터는 이 숫자 7을 메모리라는 방 어딘가에 덩그러니 저장해둘 수도 있지만, 나중에 다시 이 숫자를 찾아서 사용하려면 어디에 있는지 일일이 뒤져봐야 하는 번거로움이 있겠죠. 하지만 우리가 ‘favorite_number’라는 이름표를 붙인 ‘정수 상자’를 만들고 그 안에 숫자 7을 넣어둔다면 어떨까요? 나중에 ‘favorite_number’ 상자만 열어보면 언제든 쉽게 숫자 7을 꺼내 쓸 수 있게 되는 거죠!
C 언어라는 컴퓨터 언어에서는 이러한 ‘상자’를 만들기 전에 반드시 어떤 종류의 데이터를 담을 건지 미리 알려줘야 해요. 마치 우리가 택배 상자를 보내기 전에 안에 깨지기 쉬운 물건이 있는지, 옷인지, 책인지 종류를 써 붙이는 것과 비슷하죠. C 언어에는 여러 종류의 ‘상자’가 있답니다.
가장 기본적인 ‘상자’ 중 하나는 바로 ‘정수 상자’예요. 이 상자에는 -100, 0, 5, 1000과 같은 정수, 즉 소수점이 없는 숫자를 담을 수 있어요. C 언어에서는 이 ‘정수 상자’를 만들 때 ‘int’라는 특별한 약속된 단어를 사용합니다. 마치 “나는 이제부터 정수를 담을 상자를 만들 거야!”라고 컴퓨터에게 알려주는 것과 같아요. 그리고 이 ‘정수 상자’는 컴퓨터 메모리 안에서 4바이트라는 크기의 공간을 차지하게 됩니다. 1바이트는 우리가 흔히 사용하는 알파벳 한 글자 정도를 저장할 수 있는 크기라고 생각하시면 돼요. 그러니까 정수 상자는 알파벳 4글자가 들어갈 만한 공간을 사용하는 거죠.
또 다른 유용한 ‘상자’는 바로 ‘문자 상자’랍니다. 이 상자에는 ‘a’, ‘B’, ‘!’, ‘?’과 같은 하나의 문자를 담을 수 있어요. C 언어에서는 이 ‘문자 상자’를 만들 때 ‘char’라는 단어를 사용합니다. ‘character(문자)’의 줄임말이죠. 이 ‘문자 상자’는 ‘정수 상자’보다 훨씬 작은 1바이트의 메모리 공간만을 사용해요. 하나의 글자만 저장하면 되니까 더 작은 공간으로도 충분한 거죠.
여기서 중요한 점은, 왜 굳이 이렇게 여러 종류의 상자를 만들어서 사용하는 걸까요? 그 이유는 바로 ‘효율성’ 때문이에요. 만약 우리가 모든 데이터를 다 똑같은 크기의 아주 큰 상자에만 담는다고 상상해 보세요. 알파벳 ‘a’ 하나만 저장하는데도 커다란 상자 전체를 낭비하게 되겠죠. 마치 반지 하나를 보관하기 위해 커다란 금고를 사용하는 것과 같은 비효율적인 상황이 벌어지는 거예요.
하지만 C 언어에서는 데이터의 종류에 맞춰서 딱 맞는 크기의 상자를 사용하기 때문에 메모리라는 소중한 공간을 낭비하지 않고 효율적으로 사용할 수 있답니다. 정수는 비교적 큰 숫자를 표현해야 하므로 4바이트를 사용하고, 하나의 문자만 저장하면 되는 경우에는 1바이트만 사용하는 것이죠.
우리가 변수라는 ‘이름표 붙은 상자’를 만들고 그 안에 원하는 데이터를 넣는 과정을 C 언어에서는 ‘변수 선언’이라고 부릅니다. 변수를 선언할 때는 어떤 종류의 데이터를 담을 건지(int인지 char인지 등)를 먼저 쓰고, 그 상자에 붙일 이름표(변수 이름)를 써주면 돼요. 예를 들어, 아까 우리가 좋아했던 숫자 7을 저장하는 ‘정수 상자’를 만들고 ‘favorite_number’라는 이름표를 붙이고 싶다면 C 언어에서는 이렇게 쓴답니다
이렇게 선언만 해두면 ‘favorite_number’라는 이름의 ‘정수 상자’가 메모리 어딘가에 4바이트 크기로 뿅 하고 만들어지는 거예요. 아직 상자 안에는 아무것도 들어있지 않지만, 이제 우리는 이 상자에 정수를 넣고 필요할 때 언제든 ‘favorite_number’라는 이름으로 불러서 사용할 수 있게 된 거죠.
만약 우리가 좋아하는 알파벳 ‘A’를 저장하고 싶다면 ‘문자 상자’를 만들고 ‘favorite_alphabet’이라는 이름표를 붙일 수 있겠죠. C 언어에서는 이렇게 쓴답니다.
이렇게 하면 ‘favorite_alphabet’이라는 이름의 ‘문자 상자’가 메모리 어딘가에 1바이트 크기로 만들어지고, 우리는 이 상자에 문자 ‘A’를 비롯한 다양한 문자를 담을 수 있게 되는 거예요.
우리가 컴퓨터에 저장하는 모든 데이터는 사실 0과 1로 이루어진 이진수 형태로 변환되어 저장된다는 사실, 알고 계셨나요? 마치 우리가 일상에서 10진수를 사용하는 것처럼, 컴퓨터는 2진수를 사용해서 모든 정보를 표현하고 이해한답니다. 우리가 변수에 어떤 값을 저장하든, 컴퓨터 내부에서는 이 값이 2진수로 바뀌어서 해당 변수가 차지하는 메모리 공간에 저장되는 것이죠.
예를 들어, 우리가 ‘favorite_number’라는 ‘정수 상자’에 숫자 30을 저장한다고 해볼게요. 숫자 30은 컴퓨터 내부에서 2진수 ‘00000000 00000000 00000000 00011110’ (4바이트, 즉 32비트)으로 변환되어 ‘favorite_number’ 상자가 차지하는 메모리 공간에 저장되는 것이랍니다. 우리가 나중에 ‘favorite_number’ 값을 읽어오라고 명령하면, 컴퓨터는 이 2진수를 다시 우리가 이해할 수 있는 10진수 30으로 바꿔서 보여주는 것이죠.
문자도 마찬가지예요. 우리가 ‘favorite_alphabet’이라는 ‘문자 상자’에 문자 ‘A’를 저장하면, 컴퓨터는 문자 ‘A’에 해당하는 ASCII 코드값인 65를 이진수 ‘01000001’ (1바이트, 즉 8비트)로 변환해서 ‘favorite_alphabet’ 상자에 저장합니다. 나중에 이 변수의 값을 읽어오면 컴퓨터는 이 2진수를 다시 ASCII 코드표를 참조하여 문자 ‘A’로 변환해서 보여주는 것이죠.
이처럼 변수는 우리가 데이터를 편리하게 저장하고 관리할 수 있도록 도와주는 아주 중요한 개념이랍니다. 마치 우리 방에 있는 이름표 붙은 상자들 덕분에 물건을 쉽게 찾고 정리할 수 있는 것처럼 말이죠. C 언어를 배우는 것은 컴퓨터의 정리정돈 비법을 배우는 것과 같다고 할 수 있어요. 변수라는 똑똑한 저장 상자를 잘 활용하면 우리는 컴퓨터의 메모리를 효율적으로 사용하고, 복잡한 데이터도 체계적으로 관리할 수 있게 된답니다.
다음 시간에는 이 변수라는 상자에 어떻게 원하는 값을 처음으로 넣어주는지, 그리고 그 안에 들어있는 값을 어떻게 꺼내서 사용하는지에 대한 더 흥미로운 이야기를 들려드릴게요. 컴퓨터 속 세상의 정리정돈 이야기는 아직 끝나지 않았답니다!
유튜브 채널에서 더 자세한 내용 확인해보세요!
https://youtu.be/THp66SnjPm8