728x90
안녕하세요! 이번 글에서는 정적 변수에 대해 알아보겠습니다.
정적변수(Static Variable)는 프로그램 실행 중에 메모리에 한 번만 할당되며, 해당 변수가 선언된 함수 또는 클래스의 범위에서 사용됩니다.
정적변수는 변수가 선언된 함수나 클래스의 인스턴스와는 별개로 존재하며, 해당 범위 내에서 데이터를 유지할 수 있습니다.
이제 정적변수에 대해 자세히 알아보겠습니다.
정적변수의 선언과 사용
- 정적변수는 함수 내부에서 선언될 때 static 키워드로 표시되며, 클래스 내부에서 선언될 때도 static 키워드로 표시됩니다.
- 정적변수는 해당 함수 또는 클래스의 모든 인스턴스에서 공유되며, 변수가 선언된 함수 또는 클래스의 범위에서만 접근할 수 있습니다.
메모리 할당
- 정적변수는 프로그램이 실행되기 전에 메모리에 할당되며, 프로그램 종료 시 메모리에서 해제됩니다.
- 정적변수의 라이프 사이클은 프로그램의 시작과 끝에 따라 결정됩니다.
- 정적변수는 처음으로 접근될 때 초기화되며, 이후에는 이전 값이 유지됩니다.
초기화
- 정적변수는 함수 내부에서 지역 변수로 사용될 때 해당 함수가 호출될 때마다 변수가 초기화되는 것이 아니라, 변수가 한 번만 초기화됩니다.
- 이로 인해 함수 호출 사이에서 변수의 값이 유지됩니다. 클래스 내부에서 정적변수로 사용될 때는 해당 클래스의 모든 인스턴스에서 공유되는 변수로 사용됩니다.
- 모든 인스턴스에서 동일한 정적변수를 사용할 수 있으며, 변수에 대한 변경은 모든 인스턴스에서 동일하게 반영됩니다.
정적변수 예제
#include <iostream>
class Counter
{
public:
static int count; // 정적변수 선언
Counter()
{
count++; // 생성자에서 count 증가
}
static void printCount()
{
std::cout << "Count: " << count << std::endl;
}
};
int Counter::count = 0; // 정적변수 초기화
int main()
{
Counter c1;
Counter::printCount(); // Count: 1
Counter c2;
Counter::printCount(); // Count: 2
return 0;
}
- Counter 클래스에는 count라는 정적변수가 선언되어 있습니다.
- 클래스의 생성자에서는 count 값을 증가시키고, printCount 함수에서는 count 값을 출력합니다.
- main 함수에서 Counter 클래스의 인스턴스를 생성하고, printCount 함수를 호출하여 count 값의 변화를 확인합니다.
<코드 해석>
- 정적변수는 클래스의 모든 인스턴스에서 공유되기 때문에, c1과 c2는 동일한 count 변수를 참조합니다.
- 따라서 c1을 생성할 때 count가 1이 되고, c2를 생성할 때 count가 2가 됩니다.
- printCount 함수를 호출하여 count 값을 출력하면, 해당 시점의 count 값이 정상적으로 유지되고 있음을 확인할 수 있습니다.
정적변수는 해당 함수나 클래스의 인스턴스와는 독립적으로 존재하며, 메모리에 한 번만 할당됩니다.
다양한 함수 또는 인스턴스 간에 데이터를 공유하고 유지하기 위해 정적변수를 사용할 수 있습니다.
정적변수 또한 프로그램의 구조에따라 설계된 방식대로 사용하여야 코드의 가독성과 구조를 좋게 유지할 수 있습니다.
감사합니다!
728x90
'[C++] > 프로그래밍 기초' 카테고리의 다른 글
[C++] 프로그래밍 기초 : 삼항 연산자 (16) | 2023.06.24 |
---|---|
[C++] 프로그래밍 기초 : SOLID원칙 (30) | 2023.06.19 |
[C++] 프로그래밍 기초 : 전역변수 (31) | 2023.06.16 |
[C++] 프로그래밍 기초 : 포인터 연산 (49) | 2023.06.12 |
[C++] 프로그래밍 기초 : 열거형 (33) | 2023.06.12 |