변수
1. 變數, variable
1.1. 사전적 의미
어떤 상황의 가변적 요인을 의미하는 한자어다.
1.2. 수학에서
수학에서의 변수란, 어떤 정해지지 않은 임의의 값을 표현하기 위해 사용된 '기호' 이다. 보통 쉽게 설명하기 위해서 '변하는 숫자' 라는 표현을 자주 쓰고는 한다. 반대말로는 상수가 있다.
변수의 본격적인 도입은 프랑수아 비에트에 의해 16세기에 이루어졌다. 이 변수라는 존재는 수학이라는 학문에 대수학이 가져다 준 가장 큰 산물 중 하나이자, 또한 16세기말을 기점으로 대수학이 본격적으로 엄밀하고 이전과는 다른 수준의 수학으로 진화될 수 있게 해준 장본인이기도 하다.
변수가 등장하기 이전까지의 대수학은 현대의 대수학과 달리 '엄밀한 증명'같은 내용에는 관심 없는 '아랍에서 건너온 ''산수 방법''' 또는 '똑똑한 이탈리아인들이 발견한 ''방정식을 푸는 기술''' 정도에 불과하였다.[1] 그러나 비에타에 의해 변수가 도입되자 대수학은 '연산 방법'에서, '연산 그 자체의 성질에 대한 추론과 연구'로 진화할 수 있게 된다. 예컨대 당장 '덧셈 연산'의 성질인 '교환 법칙'만 보더라도, 변수를 사용하지 않는다면 이의 일반화된 표현조차 불가능하다. 즉 '□+△ = △+□' 라는 표현 대신 '어떤 두개의 숫자를 더할 때, 더하는 순서를 바꾸더라도 그 결과는 동일하다' 라는 표현을 써야되는 것이다. 그렇기에 변수는 대수학을 '연산 기술' 로부터 '''연산 대상과 연산자의 성질에 대해서 연구하는 수학'''으로 바꿔버린 주인공이 된다.
더불어 이러한 대수 구조를 엄밀하게 연구할 수 있게 해줄 뿐 아니라, 변수를 이용하면 방정식의 미지수 또한 기호로 표현할 수 있다. 그렇기에 이는 변수가 등장하기 이전의 대수학에서도 이미 중요한 주제였던 '방정식의 해를 구하는 기술'에 대한 연구도 이전보다 훨씬 더 엄밀하게 이뤄질 수 있게 해줬다. 예를 들어 이차방정식의 근의 공식은 고작 중학교때 배우는 내용이다. 그러나 만약 변수라는 개념이 아예 존재하지 않는다고 가정한 채 이를 표현하고자 한다면, 이는 결코 만만치 않은 일이다.
또한 변수는 대수학의 진화의 촉매 역할 뿐 아니라 수학의 다른 대부분의 분야에서도 필수적인 기반이 되어준다. 미적분학은 함수의 입력값들과 출력값들을 변수로 표현한 덕분에 존재할 수 있다. 극한을 엄밀한 표현으로 바꿔주는 것도 엡실론과 델타라는 변수(와 집합론)이다. 함수를 정의하고 그 성질을 연구할 때 입력과 출력을 각 경우별로 하나 하나 나열하지 않고 변수로 일반화시켜 한꺼번에 표현한 후 이들을 다루면서 엄밀한 논리를 차근 차근 적용해 가는 것은 모든 해석학에서 당연스럽게 취하는 핵심적인 태도와 방식이다. 흔히 쓰이는 표현인 '해석적인(Analytical) 방식'이라는 표현[2] 의 의미 또한, 바로 이렇게 해석학에서 대상을 다루듯이 '변수를 그대로 이용하고 연산하며 엄밀한 논리의 전개를 펼쳐가는 방식'을 말한다.
해석학 등에서 사용되는 엡실론-델타 논법을 그대로 고등학교 수학에서 적용하면 학생들은 극한, 연속, 미분, 적분에 관한 의미를 파악하는 것조차 힘들 것이다. 이에 해석학에서 사용되는 다양한 변수의 의미와 고등학교 수학에서 사용되는 변수는 다른 의미를 갖는다.
수학이 아닌 일상생활에서 변수라는 단어가 쓰일 때는 행위에 대한 결과가 여러 가지인 경우, 혹은 어떤 것을 하기 위한 선택지가 많은 상황 등, 현재 정해져 있지 않은 요인들을 뜻한다.
1.3. 컴퓨터 프로그래밍
특정 값을 저장하는 메모리 공간을 뜻한다. 해당 메모리 공간에 저장되는 값은 정수형(integer(int)), 실수형(float, double), 문자(char) 및 문자열(String) 등 여러가지 형식이 있으며 이를 이용하여 프로그래밍 한다. 해당 메모리 공간에는 허용되는 범위 내에 어떤값이든 저장할수 있으므로 변수라고 하며, 허용되는 범위보다 큰 값을 저장하려고 할 때 오버플로가 발생한다.
각 프로그래밍 언어에 따라 변수의 선언 방법 및 값 대입방법, 연산하는 방법등, 문법에는 비슷한 점이 많으나 조금씩 차이가 있다. ( 문법에 관한 사항은 해당 프로그래밍 언어를 참조 )
1.3.1. 변수의 종류
1.3.1.1. 처리 가능 영역에 의한 구분
블록(예: 함수) 내에서 선언되어 블록 내에서만 이용할수 있는 변수를 지역변수(Local Variable)라고 한다. 처리가 끝난 이후에는 해당 변수는 이용할 수 없으며, 상위 혹은 다른 블록에 같은 이름의 변수가 있더라도 메모리 공간 자체는 다르므로 다른변수라고 보아야 한다. 다른 블록에 전달되는 변수를 매개변수라고 하며, 변수에 저장되어있는 값 뿐만 아니라, 해당 메모리 공간 자체를 활용하기 위하여 메모리공간의 주소값을 이용하는데, 이를 보통 포인터 라고 하며, 포인터를 저장하고 있는 변수를 포인터변수 라고 한다.
지역변수와는 반대로, 프로그램 내 전체에서 사용 가능한 변수를 전역변수라고 한다.