본문 바로가기

프로그래밍/C Lang

C언어 강좌 :: 06. 변수


목차

  • 데이터를 담는 공간, 변수
  • 변수 생성하기
  • 변수에 데이터 저장하기
  • 변수 초기화



데이터를 담는 공간, 변수


변수(variable)는 데이터를 담는 공간입니다. 변수에는 이름을 붙여 담고 있는 데이터에 의미를 부여할 수 있고, 담고있는 데이터를 원할 때마다 바꿀 수 있습니다.


변수를 만들 때에는 아래 2가지를 먼저 생각해보아야 합니다.

  • 변수에 어떠한 데이터를 담을까?(자료형)
  • 변수의 이름은 무엇이 좋을까?(식별자)


변수를 생성하기 위해선 첫번째로 어떤 자료형의 데이터를 담을 지 정해야 합니다. 그리고 그 변수에 접근하기 위해서 변수의 이름을 정해주어야 합니다.





변수 생성하기


c언어에서 변수를 생성하는 코드의 형식은 다음과 같습니다.


자료형 변수이름;


예를 들어 정수형 데이터를 담을 count라는 이름의 변수를 생성하려면 다음과 같은 코드를 작성해야합니다.


int count; // int형 변수 count를 선언한다


c언어에서는 변수를 생성할 때 반드시 저장할 데이터의 자료형을 미리 알려주어야 합니다. 한번 생성된 변수는 소멸될 때까지 생성될 때 정해졌던 자료형과 이름을 가지고 살아가게 됩니다. 중간에 바뀌지 않는다는 얘기입니다.


프로그래밍에서 변수를 생성한다라는 말대신 변수를 선언한다라고 말합니다. 


변수가 선언되면 시스템에서는 해당 변수의 자료형에 맞는 메모리를 할당해줍니다. 변수 count의 자료형은 int이므로 다음 그림처럼 4byte만큼의 메모리를 할당받을 것입니다.

변수를 생성만 했을 뿐인데 변수에 할당된 메모리에는 '0xEEAB3C21'이라는 값이 이미 존재하고 있습니다. 사실 할당되는 메모리는 전에 누가 사용했던 메모리이고 그 때 사용됬던 값이 남아있기 때문입니다. 이러한 '이미 존재했던 값'을 쓰레기값이라고 부르며 이 값을 지우는 것이 중요합니다. 쓰레기값을 지우는 것을 '초기화'라고 합니다.




변수에 데이터 저장하기


변수에 데이터를 저장하기 위해서는 대입연산에 대해 알아야합니다. c언어에는 다양한 연산이 존재하는데 그 중 하나가 대입연산입니다. 대입연산을 하기 위해서는 대입연산자가 필요하며 기호는 '='입니다.

결론적으로 변수에 값을 대입하는 형식은 다음과 같습니다.


변수이름 = 데이터값;


예를 들어 count라는 변수에 0이라는 값을 대입하려면 다음과 같은 코드를 작성해야합니다.


count = 0; // 변수 count에 0을 대입


변수에 값을 대입하는 명령문이 수행되면, 메모리 속의 값은 다음 그림처럼 대입된 값으로 변경될 것입니다.


대입 연산의 규칙


대입연산은 오른쪽의 값을 왼쪽 변수에 넣는 식으로 수행됩니다. 만약 왼쪽에 변수가 아닌 상수가 오게된다면 그것은 컴파일 에러를 발생시킵니다. 다음은 초보자들이 자주 실수하는 잘못된 코드입니다.


0 = count // 오류! 상수에 변수의 값을 대입


상수에 변수의 값을 대입하는 것이 왜 잘못된 것일까요? 그 이유는 상수는 메모리가 할당되지 않기때문입니다. 변수에는 값을 저장할 공간이 있지만 상수는 그렇지 않기 때문이지요.




변수 초기화


변수를 선언하게되면 시스템이 변수에게 메모리를 할당해줍니다. 이 때, 할당받은 메모리공간에는 기존에 있었던 데이터가 남아있습니다. 이러한 데이터는 의미없는 값이기 때문에 쓰레기값이라고 부릅니다. 프로그래머는 이러한 쓰레기값을 사용하지 않도록 의미있는 값을 대입하여 청소해주어야 합니다. 이러한 쓰레기값 청소를 초기화라고 부릅니다.


변수 초기화란 변수가 선언된 후 처음으로 값을 대입하는 행위를 의미합니다. 다음은 변수 초기화의 간단한 예입니다.


int x;

x = 0;


위처럼 변수를 선언하고 변수에 값을 대입하여 변수를 초기화할 수 있지만 c언어에서는 선언과 동시에 값을 초기화하는 다음과 같은 형태의 명령문도 작성할 수 있습니다.


int x = 0; // 변수 x를 선언하고 0으로 초기화


하지만 명령문의 숫자가 줄었다고 프로그램의 성능이 좋아지거나 하지는 않습니다. 다만 명령문 한줄로 선언 및 초기화를 하는 쪽이 코드 미관상 좋습니다.




확인문제


Q. 이름이 var인 정수형 변수를 선언하고 200으로 값을 초기화하라


A. int var = 200;


Q. 다음 코드는 컴파일 도중 에러가 발생한다. 그 이유는?


double pi;

3.14 = pi;


A. 상수에 변수의 값을 대입하려고 하고 있어서