변수, 자료형, 식별자, 전역/지역 변수

2022. 2. 9. 00:45IoT Embeded 강의

#변수(variable)

오늘은 변수와 자료형에 관하여 정리하겠습니다. 과거에 저는 수학에서 변수란 정해져있지 않은 미지수라는 개념으로 생각했습니다. 그런데 컴퓨터 언어를 배우면서 변수는 다른 개념으로 생각하는게 좋다고 생각이 듭니다. 컴퓨터는 CPU에서 연산 처리를 하기 전에 특정 메모리 공간을 지정하여 명령어와 데이터를 쓰고 읽어옵니다.변수 x를 지정한다는 것은 그런 메모리 공간에 x라는 이름으로 공간을 배정해주는 것과 같다고 생각하면 됩니다. 프로그래머는 변수를 사용하기 위해 선언과 초기화라는 과정을 하게 되는데 이를 컴퓨터의 입장에서 비유하면 다음과 같습니다.

 

#include <stdio.h>

 

int main()

{

int x;  =>  메모리에 int의 크기인 4바이트만큼 공간을 지정해두고 이를 x라고 이름을 지어줍니다.

x = 0;  => 지정한 메모리 공간 x에 '0'이라는 데이터를 대입,저장합니다.

 

return 0;

}

 

위의 상황을 메모리에서 보면 위와 같습니다. 위의 8x8 사각형을 메모리라고 하고 사각형 한칸의 크기를 1바이트라고 하겠습니다. int 자료형은 4바이트의 메모리를 갖기 때문에 4칸을 차지합니다. 변수 x를 int형으로 선언한 것은 그림처럼 메모리 안에 4바이트의 크기를 지정한 뒤 x라는 이름을 지어준 것입니다. 따라서 앞으로는 개발자가 x를 사용하면 기계의 입장에서는 x라는 메모리의 위치를 받아 안의 데이터를 읽고 쓰게 되는 것입니다. 이 후 x에 '0' 을 대입했습니다. 이를 초기화라 하며 이를 하는 이유는 초기화 전에는 메모리에는 알 수 없는 값이 들어있기 때문입니다. 따라서 초기화를 통해 변수에 어떤 값이 있는지 명시하는 것입니다. 변수 y는 초기화를 하지 않아 어떤 모르는 값이 들어 있으며 이를 쓰레기 값이라고 부릅니다. 

 

정리하자면 변수는 데이터를 저장하는 컴퓨터 메모리 공간을 가리키는 식별자입니다.

 

#자료형 (Data type)

변수를 선언하면서 int라는 자료형을 사용했습니다. 자료형이란 것은 데이터에 따라서 메모리의 크기를 정해놓은 형식입니다. 자료형에 따라 할당되는 메모리가 다르기 때문에 데이터에 맞게 사용하는 것이 좋습니다. 위의 예시에서 int형은 4바이트의 크기를 갖는 정수형 자료형입니다. 자료형의 크기가 클수록 담을 수 있는 데이터의 수도 많아집니다. 

다음은 자료형에 따른 데이터 크기와 정수 표현 범위를 정리한 것입니다. 

데이터 타입   길이 표현 가능 범위
정수형 unsigned char 1byte 0~255
unsigned short 2byte 0~65,535
unsigned long(int) 4byte 0~4,294,967,295
char 1byte -128~127
short 2byte -32,768~32,767
long(int) 4byte -2,147,483,648~2,147,483,647
실수형 float 4byte +-3.4e-37, +- 3.4 x e38
double 8byte +-1.7e-307, +- 1.7 x e308

1바이트는 8비트이고 8비트는 2^8인 256개만큼 정보를 표현할 수 있습니다. 다른 바이트들도 이와 같이 계산할 수 있습니다. unsigned 는 부호가 없는 양수값만 가지는 것을 의미합니다. 음수까지 표현해야 하는 경우 이를 반으로 잘라서 음수까지 표현합니다. 정수형은 정수를 표현할 때 주로 사용하며 이 중 char은 문자를 표현할 때 쓰는 문자형입니다. 실수형은 부동소수점 방식을 이용하여 소수까지 표현 가능한 자료형입니다. 

 

자료형에 따라서 연산 과정과 출력되는 값이 달라지므로 각 자료형이 표현하는 범위와 방식을 이해하는 것이 중요합니다. 이외에도 사용자 정의 자료형, 구조체, 공용체와 같은 자료형들이 있는데 이는 추후에 자세히 정리하겠습니다.

 

#식별자(identifier)

식별자는 변수, 함수, 클래스 등에 이름을 지어 사용할 때 그 이름을 의미합니다. 개발자가 프로그램 내에서 자율적으로 정의, 선언할 수 있습니다. 식별자에는 몇 가지 규칙이 있습니다.

  식별자 규칙
- 알파벳 대소문자를 구분한다.
- 알파벳, 숫자, 한글, _(언더바)의 조합으로 사용
- 숫자로 시작은 안됨, 특수 기호는 언더바만 사용 가능. 다른 특수 기호, 공백 안됨
- 예약어 (명령어)는 사용 불가
  예약어 : 프로그램 언어에서 사용하는 문법적인 단어들( if, for, while, int ,float)

 

식별자 예시

int x; // x가 식별자

 

int Function1 (int x,int y) //Function1이 식별자

{

}

 

#지역 변수와 전역 변수

 

변수를 선언하는 위치에 따라서 그 변수를 지역 변수와 전역 변수로 구분할 수 있습니다. 전역 변수는 메인 함수 밖이나 전처리기 부분(쉽게 모든 함수 밖과 헤더파일 선언부분 사이)에 선언하는 변수로 프로그램 내의 다른 함수들이나 라이브러리에서 이 변수를 가져다가 사용할 수 있습니다. 

 

반면에 지역 변수는 어떤 특정한 함수 내에서 선언한 변수로 그 변수는 함수 내에서만 사용가능하며 다른 함수에서 선언없이 그 변수를 이용할 시 컴파일 에러가 발생합니다. 즉, 지역 변수는 그 함수 내에서만 유효하며 다른 함수에서는 전혀 모르는 변수로 취급됩니다. 

 

#include <stdio.h>

 

int GlobalVar;  //전역 변수, 어떤 함수에서든지 이 변수를 가져다가 사용할 수 있습니다.

 

int Function1 (int x, int y)

{

   printf("Hello");

}

 

int main()

{

int LocalVar; //지역 변수 main 함수 내에서만 사용되는 변수로 다른 함수에서는 사용하지 못하는 변수입니다.

return 0;

}

 

for문에서 자주 나오는 i라는 변수도 for문 내에서만 동작하며 for문 밖에서는 i의 선언 없이 이를 사용할 수 없습니다. 정리하면 지역변수는 중괄호 {} 내에서 선언되며 {} 내에서만 유효합니다.

 

'IoT Embeded 강의' 카테고리의 다른 글

서식문자  (0) 2022.02.09
C언어 기본 구조와 통합개발환경(IDE)  (0) 2022.02.09
Over flow (오버플로우)와 Under flow(언더플로우)  (0) 2022.02.08
반복문의 기본 문법  (0) 2022.02.08
조건문의 기본 문법  (0) 2022.02.07