변수 (프로그래밍)
변수(變數)란 컴퓨터 프로그램에서 그 값이 일정하지 않고 상황에 따라 변경되는 값을 말한다. 실제 값을 가진 변수와 값이 들어가 있는 주소를 가리키는 참조변수(Reference Variable)가 있다. 반대말은 상수(Constant)이다.
목차
개요
변수는 특정 값을 저장하는 메모리 공간을 뜻한다. 메모리 공간에 저장되는 값은 정수형(integer( int )), 실수형(float, double), 문자열(char[]) 등 여러가지 형식이 있으며 이를 이용하여 프로그래밍 한다. 해당 메모리 공간에는 허용되는 범위 내에 어떤값이든 저장할수 있으므로 변수라고 한다. 각 프로그래밍 언어에 따라 변수의 선언 방법 및 값 대입방법, 연산하는 방법등, 문법에는 비슷한 점이 많으나 조금씩 차이가 있다. [1]
특징
변수는 데이터 값을 저장하기 위해 이름을 가지고 있는 공간이다.[2] 모든 프로그램들은 수많은 변수들로 구성되어있다. 프로그래밍을 처음 접하게 되면 빠지지 않고 변수를 접할 수 있는데, 프로그램에서 특정 값을 입력하거나 출력하기위해 사용된다. 데이터가 사라지지 않기 위해서는 저장소에 데이터를 저장해두어야 하는데 그 부분을 변수가 해준다.[3]
예를 들어서 ATM기기에 1000원을 넣었는데 다음날 확인해보니 0원이 되어있고 다시 2000원을 넣었는데 0원이라고 출력되는 일을 막기 위해서 변수라는 저장소에 값을 저장해두는 것이다.
형태
변수를 만들 때에는 자료형을 정해주고 이름이 필요하기 때문에 적절한 이름을 선언해준다. 이 때 '='를 이용하면 적절한 값을 대입해 줄 수 있다. 변수는 '변화할 수 있는 수'라는 뜻을 지니고 있어 대입을 통해 언제든지 값을 변화 시킬 수 있다. 우선 변수를 먼저 선언 한 후 값을 대입할 수도 있고, 변수를 선언하면 동시에 대입할 수도 있다. 변수를 선언과 동시에 값을 대입하는 것을 초기화라고 한다. 값을 대입할 때 프로그래밍에서는 '='를 사용하는데 수학에서 사용하는 '='는 '같다.'라는 표현으로 사용되어 혼동될 수 있다. 프로그래밍에서는 어떠한 값을 대입할 때 '='부호를 사용하고 '같다'라는 의미를 가질 때에는 '=='로 등호 두 개를 연속으로 사용한다.[3]
규칙
변수를 생성할 때에는 생성 규칙을 따라주어야한다. 프로그래밍 언어마다 다른 규칙을 가지고 있지만 대부분 비슷한 형태를 지니고 있다.
우선 변수의 이름은 영문자, 숫자, 언더스코어(_)만을 사용해야한다. 영문자의 경우 대소문자 전부 사용이 가능하며 이 외의 특수문자를 사용할 수는 없다. 그리고 변수의 이름은 숫자로 시작할 수 없다. 그 이유는 컴파일러가 코드 조각을 컴파일 하면서 어휘 분석을 할 때 역 추적을 피할 수 있기 때문이다. 변수임을 식별하기 위해서는 역 추적이 필요한데 변수 앞에 숫자가 붙으면 컴파일러는 숫자 혹은 식별자가 문자에 도달할 때까지 결정할 수 없기 때문이다.[4] 그리고 변수의 이름 사이에는 공백을 포함할 수 없으며 변수의 이름으로 프로그래밍 언어에서 미리 정의한 키워드는 사용할 수 없다. 변수의 이름 사이에 공백을 포함할 수 없는 이유는 위에서 말했듯이 추적이 어렵기 때문이며, 프로그래밍 언어에서는 특정 키워드들을 미리 정해놓고 사용할 수 있도록 하는데 이 특정 키워드를 사용하게 되면 컴파일러가 변수인지 키워드인지 구분하지 못해 에러가 발생하는 것이다.
메모리
변수는 기본적으로 메모리의 주소를 기억하는 역할을 한다. 메모리 주소란 물리적인 메모리 공간을 서로 구분하기 위해 사용되는 일종의 식별자이다. 즉, 메모리 주소란 메모리 공간에서의 정확한 위치를 식별하기 위한 고유 주소를 의미한다. 변수를 참조할 때에는 메모리의 주소를 참조하는 것이 아닌, 해당 주소에 저장된 데이터를 참조하게 된다. 따라서 변수는 데이터가 저장된 메모리의 주소뿐만 아니라 저장된 데이터의 길이와 형태에 관한 정보도 같이 기억해야한다.[5]
선언
변수를 사용하기 전에 반드시 먼저 해당 변수를 저장하기 위한 메모리 공간을 할당 받아야 한다. 이렇게 해당 변수만을 위한 메모리 공간을 할당하는 행위를 변수의 선언이라고 부르는데 프로그래밍에서 변수를 선언하는 방법은 다음과 같은 방법이 있다. 첫번째로 변수의 선언만 하는 방법이다. 우선적으로 변수를 선언하고 나중에 데이터를 대입해주는 방식으로 변수를 선언했을 때 변수 내에 어떠한 값이 들어있는지는 모르지만 이후에 대입을 통해 변수에 원하는 값을 넣을 수 있다.
int main(){ int a; a=10 return 0; }
두번째 방법으로는 변수의 선언과 동시에 초기화를 하는 방법으로 선언과 동시에 메모리 공간에 데이터를 대입하는 형식이다. 이는 초기화라고 하는데 선언한 변수 내에 어떠한 값이 들어있는지 확인할 수 없기 때문에 선언과 동시에 데이터 값을 지정해준다.
int main(){ int a = 10; return 0; }
코끼리를 냉장고에 넣을 수 없는 것과 같이 데이터의 크기에 따라 변수의 크기 또한 달라져야한다. 정수를 저장하기 위한 메모리 공간을 할당 받으면, 반드시 해당 타입의 데이터만을 저장해야한다. 만약 그렇지 않고 다른 타입의 데이터를 저장할 경우에는 저장된 데이터에 변형 및 손실이 일어나거나 코드에 에러를 유발할 수 있다.[5]
자료형
변수를 선언하기 위해서는 자료형에 맞추어야하는데 이는 아래 표에서 확인하듯이 범위를 맞추어 줘야 데이터의 변형과 손실, 에러를 생기지 않게 할 수 있다.
자료형 크기 표현 범위 문자형 char 1바이트 -128 이상 +127이하 unsigned char 4바이트 0이상 +255이하 정수형 short 2바이트 -32,768이상 +32,767이하 int 4바이트 -2,147,483,648이상 +2,147,483,648이하 long 4바이트 -2,147,483,648이상 +2,147,483,648이하 long long 8바이트 -9,223,372,036,854,775,808이상 +9,223,372,036,854,775,807이하 실수형 float 4바이트 ±3.4X10^-37이상 ±3.4X10^+38 double 8바이트 ±1.7X10^-307이상 ±1.7X10^+308 long duble 8바이트 이상 double 이상의 표현 범위 논리형 boolean 1바이트 True / False
종류
프로그래밍 언어에서의 변수는 종류가 다양하며 각 언어별로 사용하는 변수들 또한 다르다. 하지만 공통적으로 사용하는 변수들이 있는데 커다란 변수들은 전역 변수, 지역 변수, 정
활용
변수의 활용은 각 프로그래밍 언어들 마다 형태, 용도 등이 다르다. 하지만 변수에 데이터를 저장하는 저장소 역할로 사용하는 것은 다르지 않으면 활용 방법이 조금씩 다르다.
JavaScript
JavaScript에서 변수는 var로 시작한다. var은 변수를 선언하겠다는 것을 의미한다. var을 생략 할수도 있지만 이것은 유효범위라는 것에 영향을 미친다. 그렇기 때문에 var의 의미를 명확하게 이해하기 전까지는 var를 사용하는 것이 권장된다. 유효범위에 대해서는 뒤에서 살펴볼 것이다. 변수의 이름은 $, _, 혹은 특수 문자를 제외한 모든 문자로 시작할 수 있다. [6]
JAVA
자바에서는 기본 데이터 타입에 추가적으로 레퍼런스 타입과 문자열 타입이 존재한다. 레퍼런스 타입은 배열에 대한 레퍼런스, 클래스에 대한 레퍼런스, 인터페이스에 대한 레퍼런스가 있다. 문자열의 경우 기본 데이터 타입에는 속하지 않으며, 'String' 클래스를 이용해서 선언할 수 있다. 문자열의 표현은 큰 따옴표("")로 표현 가능하며, 문자열과 문자열 간의 연결은 '+'연산을 이용해 연결이 가능하다.
자바에서는 표현되어 있는 데이터가 서로 다른 타입으로 사용되었을 때, 그 데이터의 표현 방식을 다른 타입으로 변환하는 자료형 변환이 가능하다. 방법으로는 두가지로 '자동 타입 변환'과 '강제 타입 변환'이 존재한다.
자동 타입 변환
수식 내에서 대입 연사자 '='의 왼쪽과 오른쪽에 위치한 두 피연산자 간의 자료형이 일치하지 않을 때, 컴파일러에 의해 자동으로 발생하는 형 변환 방법이다. 원래의 자료형보다 큰 자료형으로 자동 변환되며 자료형의 우선 순위는 아래와 같다.
byte -> short,char -> int -> long -> float -> double
데이터의 표현 범위가 넓은 자료형으로 형 변환 시 데이터 손실이 발생하지 않지만, 표현 범위가 좁은 자료형으로 변환 시에는 손실이 발생하며 컴파일 오류가 발생한다.
강제 타입 변환
프로그래머가 의도적으로 형 변환 연산자를 사용해 강제로 타입을 변환하는 방법이며, 이 방법은 캐스팅이라 부르기도 한다. 강제로 타입을 변환시킬 때에는 변환하고자 하는 데이터 앞에 '(자료형)'을 입력하면 된다. 하지만 기존의 자료형보다 표현범위가 좁은 자료형으로 변환 시에는 손실이 발생한다.[7]
파이썬
파이썬의 경우 변수를 선언할 때 자료형을 선언하지 않아도 상관없다. 기본 구조인 '자료형 변수명'을 사용할 수 있지만 파이썬의 경우 자료형을 자동으로 정해버리기 때문에 자료형까지 선언하지 않아도 괜찮다.
a = 1 b = 2 print(a+b)
위와 같이 작성했을 때 값은 3이 나오며 a와 b의 자료형을 int로 자동 지정해줬다.
a = 1 b = 2 a = "안녕하세요" print(a+b)
이렇게 작성하면 오류가 발생한다. a의 자료형이 int형에서 String으로 바뀌었기 때문에 서로 다른 자료형에서 '+'연산을 사용 할 수 없게 된 것이다.[8]
각주
- ↑ 나무위키, <변수>, 《나무위키》
- ↑ 코코넛랩, <코딩 기초 개념 이해하기>, 《개인블로그》
- ↑ 3.0 3.1 한 눈에 끝내는 C언어 기초, <변수란?>, 《edu.goorm.io》
- ↑ 열코의 프로그래밍 일기, <C언어 변수 이름이 숫자로 시작할 수 없는 이유>, 《열코의 프로그래밍 일기》,2018-11-13
- ↑ 5.0 5.1 TCPSCHOOL, <변수>, <<TCPSCHOOL.com>>
- ↑ 생활코딩, <변수>, 《생활코딩》, 2013-06-24
- ↑ VIOLET QUARTZ, <변수 선언하기, 데이터 타입과 타입 변환>, 《개인블로그》, 2017-04-18
- ↑ Crocus, <파이썬변수 선언 및 출력 방법>, 《개인블로그》, 2017-04-28
참고자료
- 나무위키, https://namu.wiki/w/%EB%B3%80%EC%88%98 변수]>, 《나무위키》
- 코코넛랩, <코딩 기초 개념 이해하기>, 《개인블로그》
- 한 눈에 끝내는 C언어 기초, <변수란?>, <<edu.goorm.io>>
- TCPSCHOOL, <변수>, 《TCPSCHOOL.com》
- 열코의 프로그래밍 일기, <C언어 변수 이름이 숫자로 시작할 수 없는 이유>, 《열코의 프로그래밍 일기》,2018-11-13
- 생활코딩, <변수>, 《생활코딩》, 2019-02-13
- VIOLET QUARTZ, <변수 선언하기, 데이터 타입과 타입 변환>, 《개인블로그》, 2017-04-18
- Crocus, <파이썬변수 선언 및 출력 방법>, 《개인블로그》, 2017-04-28
같이 보기