변수(Variable)
는 우리가 여태 너무 당연하게만 써오던 용어입니다. 근데 혹시 변수가 무엇인지, 왜 필요한지 정확히 설명하실 수 있나요?
역시 누군가에게 설명하거나 글을 작성할 때가 되면 내가 설명하고자 하는 그것
을 정확히 알고 있는지 확인할 수 있는 기회인 것 같습니다.
일반적으로 우리는 변수라는 용어를 수학시간에 먼저 배웠습니다. 수학적인 의미로 변수(Variable)는 영문으로도 그러하듯이 변할 수 있는 숫자 정도로 말할 수 있을겁니다. 허나 우리가 배우려는 프로그래밍에서는 다른 뜻으로 설명할 수 있어야 합니다.
10 + 20
위의 코드를 실행 했을 때 컴퓨터에서는 무슨일이 일어날 까요?
컴퓨터가 10+20
이라는 식을 계산하기 위해서는 10
, +
, 20
각각의 기호(리터럴, 연산자)를 알아야 하며, 10+20
라는 표현식을 해석할 수 있어야 합니다. 의미를 해석하면 피연산자 10
과 20
기억합니다. 컴퓨터는 계산과 기억하는 공간이 CPU와 메모리로 분리되어 있습니다.
메모리의는 데이터를 저장할 수 있는 메모리 셀의 집합체입니다. 메모리 셀 하나의 크기는 1바이트 이기에 컴퓨터는 1바이트 단위로 데이터를 저장하거나 읽습니다.
각 셀의 메모리는 메모리 주소를 갖습니다. 컴퓨터는 아까 저장하려는 10
과 20
을 각각 하나의 메모리 셀을 정해서 저장합니다. CPU는 10
과 20
을 메모리에서 꺼내서 사용하고 계산 결과인 30
도 메모리 상의 임의의 위치에 저장합니다.
성공적으로 계산을 마쳤지만 열심히 계산한 결과인 30
이라는 값을 우리는 재사용할 수 없습니다. 왜냐면 메모리 주소에 직접 접근하는 것 외에는 30
을 꺼내 사용할 방법이 없기 때문입니다. 하지만 메모리에 직접 접근하는 것은 매우 위험해 대부분의 프로그래밍 언어는 개발자가 직접 메모리 주소에 접근하는 것을 허용하지 않습니다. 메모리 주소에 직접 접근해서 값을 바꿨는데 그 값이 운영체제가 사용하고 있는 크리티컬한 값일 경우 시스템에 심각한 문제를 발생시킬 수 있기 때문입니다. 프로그래밍 언어는 저장한 값을 재사용하기 위해 변수라는 메커니즘을 제공합니다.
즉 변수란
하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말합니다.
좀 더 간단히 말하자면 변수는 값의 위치를 가리키는 상징적인 이름입니다.