본문 바로가기
언어/C++

[C++ 기본 공부정리] 2. 변수

by 민-Zero 2019. 11. 14.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

코드를 짜게 되면 나에게 필요한 데이터를 담을 공간이 필요하다. 그때 필요한 데이터를 저장하는 공간이 변수이다.

정의하면 변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 할당받은 메모리 공간을 의미한다. 즉, 변수란 데이터(data)를 저장할 수 있는 메모리 공간을 의미한다.

 

변수를 사용하기 위해서는 선언(declaration)과 정의(definition)를 해야 한다. 선언과 변수의 개념을 혼동하지 말자.

변수의 경우 선언과 동시에 정의가 되어 그냥 넘어가기 쉽지만 두 가지는 다른 내용이다. 

선언(declaration) 컴파일러가 참조할 식별자(identifier)와 이름을 알려주는 것이다. 식별자란 변수의 타입과 함수의 인수목록, 이름은 우리가 구별하기 위해 작성한 변수, 함수, 클래스 등의 이름을 뜻한다. 선언의 경우 메모리가 할당되지 않고 이런 것들이 존재한다고 알려주는 것.
정의(definition) 식별자와 이름을 통해 필요한 코드를 생성하는 것이다. 호출되었을때 실행될 코드들이 작성되므로 해당 기능실행을 위한 메모리가 할당되며 선언한 이름의 함수, 변수, 클래스 등이 어떤 동작을 할건지 알려주는 것. 

선언의 예)

extern int i; 
char *strchr( const char *Str, const char Target );

 

정의의 예)

int num1;
int num2 = 1;

class test{
	double testnum;
};

즉, 메모리가 할당 되는지 안되는지의 차이가 존재한다.

 

1. 변수 선언

지정자 변수타입 변수명;

ex) const int num;  지정자는 반드시 선언할 필요 X

위의 방법으로 사용할 변수를 선언 및 정의한다. 

 

변수는 선언된 위치에 따라 명칭이 달라진다 전역 변수와 지역변수라고 하며 차이점을 알아 두어야 한다.

-전역 변수(Global variable) : 전역 변수는 함수 외부에서 선언되며 범위(스코프)에 구애받지 않고 프로그램 전체에서 접근할 수 있는 변수이다.

-지역변수(Local variable) : 지역변수는 함수 내보에서 선언되며 해당 함수가 호출되어 실행되면 생성되었다가 함수가 종료되면 사라지는 변수이다. 해당 범위 내에서만 사용 가능하며 다른 함수에서는 접근이 불가하다.

 

지정자

간단한 지정자 몇 개를 정리하면

const constant(상수)를 사용하여 변수를 생성할 경우 해당 변수는 프로그램이 실행되는 동안 저장된 데이터의 변경이 불가하다.
static static(정적)을 사용하면 변수가 특정 범위(scope)내에 지역변수로 존재 하더라도 지역변수가 아닌 전역변수 처럼 사용이 가능하다. 즉 함수등이 종료되어도 변수가 해제되지 않고 프로그램이 종료될때 까지 살아있다.
extern 외부 프로그램에 의해 제작되고 컴파일된 실행모듈이나 라이브러리 내 존재하는 변수를 사용한다. 쉽게말해 다른 파일의 전역변수를 사용하고자 할때 선언한다.

변수 타입

변수에서 사용하는 데이터 타입을 의미한다. 데이터를 저장하는 장소가 실수를 저장하는 변수인지 구조체 또는 문자열을 저장하는 변수인지를 구별하기 위한 목적으로 사용한다.

변수 타입은 크게 정수형, 실수형, 문자형, bool 이 존재한다.

 

정수형은 부호를 가지고 있으며 소수 부분이 없는 타입을 말한다. unsigned 키워드를 사용할 경우 부호가 없는 정수 타입을 사용할 수 있으며 음수를 사용하지 못하는 대신 양의 정수를 더 많이 표현할 수 있다.

타입 할당 메모리 크기 표현 범위
short 2 bytes -2^15 ~ (2^15 - 1)
unsigned short 2 bytes 0 ~ (2^16 - 1)
int 4 bytes -2^31 ~ (2^31 - 1)
unsigned int 4 bytes 0 ~ (2^32 - 1)
long 4 bytes -2^31 ~ (2^31 - 1)
unsigned long 4 bytes 0 ~ (2^32 - 1)
long long 8bytes -2^63 ~ (2^63 -1) 
unsigned long long 8 bytes 0 ~ (2^64 - 1)

long과 int의 경우 크기가 같은데 두 개가 존재 두 가지의 차이는 int의 경우 운영체제별로 cpu가 가장 효율적으로 다룰 수 있는 크기로 변하며 long의 경우 4 bytes 고정이다.

 

실수형은 소수 부분이나 지수가 있는 수를 나타낼 때 사용하는 타입이다.

타입 할당 메모리 크기 표현 범위
float 4 bytes (3.4 X 10^-38) ~ (3.4 X 10^38)
double 8 bytes (1.7 X 10^-308) ~ (1.7 X 10^308)

문자형은 말 그대로 문자 하나를 저장할 수 있는 타입이다. 컴퓨터의 경우 2진수 만을 이해할 수 있기 때문에 문자와 2진수 사이에 약속이 필요하다. 가장 많이 사용되는 것이 아스키코드(ASCII code)이다.

타입 할당 메모리 크기 표현 범위
char 1 bytes 2^-7 ~ (2^7 - 1)
unsigned char 2 bytes 0 ~ 2^8

bool은 C++에서 0의 값을 거짓으로 0 이외의 모든 값을 참으로 인식한다. C++11부터 bool타입 이라는 새로운 타입을 제공하는대 이는 true(참), false(거짓) 중 1가지만을 가질 수 있는 타입이다.

(묵시적 타입 변환으로 인해 0 또는 0이외의 값 은 자동으로 true or false로 변환된다.)

 

2. 초기화

변수를 선언한 뒤 아무런 값을 입력하지 않고 호출할 경우 할당된 메모리 안에는 어떤 데이터도 존재하지 않으므로 쓰레기 값이 이용되게 된다. 따라서 변수를 이용할 경우 먼저 초기화를 해야 한다.

사진과 같은 방법으로 초기화를 실행할 수 있다. a라는 이름의 int형 변수를 선언 및 정의하여 메모리에 정수형 변수를 저장할 공간을 할당받고 그 공간 안에 100이라는 정수 값을 저장하여 쓰레기 값이 들어있지 않도록 하는 것이다.

 

3. 변수 이름

변수 이름을 정할 때는 규칙이 존재한다. 
- C언어와 같이 대소문자 구분
- 키워드를 변수명으로 사용할 수 없다. 단 키워드라고 할지라도 대소문자를 바꾼다면 사용이 가능하다.
(extern---> Extern 바꿀 경우 사용 가능)
- 변수 이름의 첫 번째 문자는 반드시 일반 문자를 사용하거나 또는 밑줄 문자 "_"를 사용해야 한다.

(숫자, $와 같은 특수문자를 사용할 수 없다.)
- 첫 문자 다음에는 일반 문자와 숫자 그리고 특수문자를 사용할 수 있다.

댓글