변수란 무엇인가?

어떤 프로그래밍을 시작하더라도

거의 처음에 배우는 부분이 변수입니다.

 

 음... 변수, 변하는 수... 단어 자체가

쉽지가 않습니다. 전공자에게도 어렵고

비전공자는 저런 단어가 한글에 있었나

의심스러운 단어입니다.

 

컴퓨터 기술은 서양에서 시작되었으니

원 뜻을 알려면 영어 뜻을 보는게

도움이 됩니다. variable 의 캠브리지

사전의 뜻은 likely to change often

-> 변하기 쉬운 성질, 변하는 그것입니다.

특히 자주 변하는(change often) 성질이 있습니다.

 

이 포스팅에서는 컴퓨터 프로그래밍에서의

변수에 대해서 이야기 해보려고 합니다.

 

프로그래밍 언어하면 자바, C, 파이썬,

자바스크립트 등 수많은 종류가 있습니다.

그들은 모두 변수를 사용합니다.

또 변수를 선언하는 것 부터 배우지요.

 

기계적으로 보면 변수는 메모리 주소에

연결된 이름입니다. 메모리 주소가

아래와 같이 있다고 가정해봅니다.

 

0000 0000

0000 0001

0000 0002

0000 0003

...

 

저 메모리에 값을 넣고 싶습니다.

값은 1바이트 일수도 2바이트 일수도

4바이트 일수도 있습니다.

그러면 CPU에 지시를 합니다.

 

0000 0001 에 2바이트 정수

10을 넣으려고 지시를 하려면

0000 0001에서 0000 0002 까지

2바이트를 확보해서 10을

입력하면 됩니다.

 

컴퓨터는 잘 알아듣습니다.

하지만 정작 인간은 이런 식으로

변수를 사용하는데 한계가 있습니다.

 

그래서 메모리 주소에 이름을

붙이는 방식을 사용합니다.

그 이름이 뭐건 프로그래머가

기억을 잘 할 수 있고 코드를

읽는 사람에게 유용해야 합니다.

 

예를 들어 2바이트니까 년도를

기록할 수 있습니다. (정수 0~65336)

출생년도 birthyear라는 변수를

메모리 0000 0001~0000 0002 의

2 바이트에 할당해보면 C의 문법으로

 

unsigned short birthyear=2021

 

으로 표현할 수 있습니다.

여기서 메모리 주소는 가려져 있죠.

 

출생연도를 바꿀려면 간단히

birthyear=(변경값) 으로 해결됩니다.

매우 간단한데 이게 전부입니다.

 

0000 0001 에서 0000 0002

대신에 birthyear 라고 씁니다.

 

이름을 부르지만 사실은 메모리 주소에

저장된 값에 access 하고 있는 것 입니다.

CPU는 birthyear 라는 코드가 무엇을

의미하는지 모릅니다. (AI가 아니라면)

문자열의 연속이고 문자열 조차도

아스키 코드의 나열일 뿐입니다.

아스키 코드는 숫자지요.

 

birthyear의 참된 뜻을 이해하는 것은

CPU가 아니라 프로그래머입니다.

사람이 0000 0001, 0000 000F

와 같은 메모리 주소를 하루 종일 봐도

소용이 없지만 메모리의 이름으로

보면 이해가 됩니다.

 

CPU는 변수를 주소로 변환하고

프로그래머는 메모리 주소를

사람이 쓰는 언어로 의미를

연결해서 변수간의 관계를

설정할 수 있습니다.

 

알고 나면 허무한 변수의 뜻이지만

프로그래밍 언어가

 

기계어 -> 어셈블리어 ->

절차지향형 언어 -> 객체지향형 언어

 

처럼 새로운 패러다임으로 변화할 때

변수를 사용하는 방법과 의미도

변화하고 있다는 것을 알수 있습니다.

 

물론 간단하게 변수는 메모리의 이름이다.

라고 말했지만 그 안에서는 수많은

복잡한 시스템이 있습니다.

 

지금은 파이썬이나 자바스크립트 같은

동적 타이핑 언어의 인기가 많아지고

있는데 아무래도 변수에 대해서

잘 몰라도 그냥 사람이 생각하는 것처럼

사용할 수 있기 때문에 더 쉽게

접근이 가능한 부분도 있습니다.

 

C++에서는 변수 타입이 세분화되어

있어서 변수의 사용법을 익히는데도

시간이 오래걸립니다. 예를 들어 문자형의

char 가 있는데 wchar_t 가 있고

char16_t 가 있고 char32_t 가 있습니다.

다 사용법이 다릅니다. 동적 타이핑에서는

그냥 따옴표 "" 안에 문자열을 넣으면

충분한 경우가 대부분입니다.

 

하지만 내가 설정하진 않아도 누군가는

설정해야 하기 때문에 그 일을 컴파일러나

인터프리터가 일정한 규칙을 바탕으로

처리해주고 있습니다. 아마 AI 컴파일러가

더 발달한 이후에는 대충 소스코드를

작성해도 알아서 척척 컴파일하는

시대가 아마 올 수도 있을 것 같습니다.

 

*웬지 제목만 거창하고 내용은

허접한 포스팅이 된 것 같은데요.

 

변수는 이해하기가 어렵습니다.

프로그래밍 강의에서는 너무나

당연한 듯이 변수를 가르치지만

좀 더 깊이 있는 컴퓨터 구조에

접근하기 위해서는 시간이 더 걸립니다.

 

일단은 어떤 언어를 배우더라도

변수는 메모리의 주소에 붙여진

이름이다는 것을 염두해두는 것부터

시작하면 좋을 것 같습니다.

 

여유가 있을 때 다른 포스팅에서 좀 더

다루어 보도록 하겠습니다.

 

 

 

https://docs.microsoft.com/ko-kr/cpp/cpp/char-wchar-t-char16-t-char32-t?view=msvc-170 

 

char, wchar_t, char8_t, char16_t, char32_t

자세한 정보: char, wchar_t, char8_t, char16_t, char32_t

docs.microsoft.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band