• 4.2.1 전역 변수(Global Variables)
  • 4.2.2 정적 변수(Static Variables)

4.2.1 전역 변수(Global Variables)

 

전역 변수란 함수 내에서 정의되지 않고 어디에도 종속되지 않은 변수를 뜻한다. 코드상에서 어느 중괄호 안에도 안 들어가면 전역 변수가 된다. 초기 할당이 진행되었다면 프로그램이 끝날 때까지 존재하며 extern 키워드를 사용하면 모든 파일에서 접근이 가능하다.

#include <iostream>

using namespace std;

// global variable
int value = 123;

int main()
{

	// 전역 변수가 출력
	cout << value << endl;

	// name hiding
	int value = 1;

	// 영역 연산자(전역 변수를 출력시킨다)
	cout << ::value << endl;

	// 지역 변수가 출력
	cout << value << endl;

	return 0;
}

전역 변수 value가 할당되고나면 접근이 가능해지는데, 지역 변수가 동일한 이름으로 작성되면 name hiding으로 인해 지역 변수를 먼저 접근하게 된다. 하지만 영역 연산자 ::를 사용하게 되면 지역 변수가 아닌 전역 변수로 접근해서 데이터를 사용할 수 있다.


4.2.2 정적 변수(Static Variables)

 

정적 변수도 할당이 되면 프로그램이 끝날 때까지 존재하기 때문에 전역 변수와 비슷하다고 생각될 수 있지만 조금 특성이 다르다. 정적 변수는 최초 초기화는 반드시 소스 파일에서 해야 하는 특징이 있다. 또한 정적 변수의 경우 선언된 파일 안에서만 사용이 가능하고 선언된 파일 이외에서는 사용이 불가능하다.

#include <iostream>

using namespace std;

// 해당 cpp 안에서만 전역으로 사용하는 변수 다른 곳에서는 접근 불가능
static int static_global_variable = 1;

void doSomething()
{
	// 정적 변수(메모리가 static이다, 메모리가 정적으로 선언된다)
	static int a = 1;
	++a;
	cout << a << endl;
}

int main()
{
	cout << "정적 변수 테스트" << endl;
    
	// 정적 변수 테스트
	doSomething();
	doSomething();
	doSomething();
	doSomething();

	return 0;
}

정적 변수는 특정 함수가 몇번 호출되는지 디버깅할 때 쓰면 유용하다. 전역 변수 같지만 선언된 함수 블럭 내에서만 같은 메모리를 사용하며, 함수 내부에 선언되어 있다면 외부에서는 접근할 수 없다. 물론 전역 변수의 위치에서 선언하면 전역 변수처럼 접근하겠지만 이마저도 초기화된 파일에서만 가능하지 외부 파일에서의 접근은 불가능하다. 이러한 특징 때문에 내부 연결(Internal Linkage)라고 한다.

+ Recent posts