Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ static 키워드 완벽 가이드: 정적 변수와 정적 함수 이해하기

C++ static 키워드란?

static(정적) 키워드가 적용된 변수, 데이터 멤버 또는 함수는 프로그램 실행 전체 기간 동안 단 한 번만 메모리에 할당되며, 프로그램이 종료될 때까지 유지됩니다. 또한 정적 함수는 객체 생성 없이 클래스 이름만으로 직접 호출할 수 있다는 것이 가장 큰 특징입니다.

static 변수의 주요 특징

  • 정적 변수는 단 한 번만 초기화되며, 컴파일러가 프로그램이 끝날 때까지 해당 변수를 유지합니다.
  • 함수 내부 또는 외부 어디에서든 정의할 수 있지만, 선언된 블록(스코프) 내에서만 접근 가능합니다.
  • 초기값을 따로 지정하지 않으면 기본값은 0으로 설정됩니다.
  • 정적 변수의 생명주기는 프로그램의 실행 기간과 동일합니다.

static 키워드 문법

C++에서 static 키워드의 기본적인 문법은 다음과 같습니다.

static datatype variable_name = value;      // 정적 변수
static return_type function_name {          // 정적 함수
   ...
}

구성 요소 설명

datatype − 변수의 자료형을 의미하며, int, char, float 등이 사용됩니다.

variable_name − 사용자가 직접 지정하는 변수의 이름입니다.

value − 변수를 초기화하는 값으로, 생략할 경우 기본값인 0이 할당됩니다.

return_type − 함수가 반환하는 값의 자료형입니다.

function_name − 사용자가 정하는 함수의 이름입니다.

static 변수와 static 함수 예제

다음은 C++에서 정적 변수와 정적 함수를 함께 활용한 예제입니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;
class Base {
   public : static int val;
   static int func(int a) {
      cout << "\nStatic member function called";
      cout << "\nThe value of a : " << a;
   }
};
int Base::val=28;
int main() {
   Base b;
   Base::func(8);
   cout << "\nThe static variable value : " << b.val;
   return 0;
}

실행 결과

Static member function called
The value of a : 8
The static variable value : 28

코드 분석

위 프로그램에서는 Base 클래스 내부에 정적 변수와 정적 함수를 아래와 같이 선언하고 정의했습니다.

public : static int val;
static int func(int a) {
   cout << "\nStatic member function called";
   cout << "\nThe value of a : " << a;
}

클래스 정의 이후, main() 함수 이전에 정적 변수를 다음과 같이 초기화합니다. 정적 멤버 변수는 클래스 내부에서 선언만 할 수 있으며, 실제 정의와 초기화는 반드시 범위 결정 연산자(::)를 사용해 클래스 외부에서 수행해야 합니다.

int Base::val=28;

main() 함수에서는 Base 클래스의 객체를 생성한 뒤 정적 변수에 접근합니다. 특히 정적 함수는 객체 없이도 클래스 이름만으로 바로 호출할 수 있습니다.

Base b;
Base::func(8);
cout << "\nThe static variable value : " << b.val;

실행 결과에서 볼 수 있듯이, 정적 함수 func()는 객체 생성 없이 성공적으로 호출되었으며, 정적 변수 val에는 초기화된 값 28이 그대로 저장되어 출력됩니다. 이처럼 static 키워드를 활용하면 프로그램 전체에서 공유되는 데이터와 클래스 수준의 함수를 효율적으로 관리할 수 있습니다.