본문 바로가기
개발/C++ (98,03,11,14,17,20,23)

Classic C++ : 정적 멤버 배열 초기화

by snowoods 2025. 11. 17.

Classic C++

정적 멤버 배열 초기화

 

개요

클래스의 모든 객체가 공유하는 정적(static) 멤버 배열을 선언하고 초기화하는 방법에 대해 알아봅니다.

 

C++ 버전별 주요 키워드 도입 시기

  • C++98 이전: 정적 멤버 변수의 개념은 초기 C++부터 존재했습니다. 클래스 외부에서 정의하고 초기화하는 방식이 사용되었습니다.

 

내용 설명

  • 배열이 모든 객체에 대해 동일한 값을 가지며, 각 객체가 별도의 복사본을 가질 필요가 없을 때 static const 배열을 사용합니다.
  • static 멤버는 클래스 선언 내에서 선언하고, 클래스 외부(일반적으로 소스 파일)에서 정의하고 초기화합니다.
  • static 멤버는 특정 객체에 속한 것이 아니라 클래스 자체에 속하며, 해당 클래스의 모든 객체가 공유합니다. 프로그램이 시작될 때 한 번만 생성되고 초기화됩니다.

 

예제 코드

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#pragma hdrstop

class weekday
{
private:
    static const int DPW = 7;
    static const int MAX = 10;
    static const char day_name[DPW][MAX];   // 선언

public:
    void Display(){
        cout << day_name[0] << endl;
        cout << day_name[1] << endl;
        cout << day_name[2] << endl;
        cout << day_name[3] << endl;
        cout << day_name[4] << endl;
        cout << day_name[5] << endl;
        cout << day_name[6] << endl;
    }

};

// 정의 및 초기화
const char weekday::day_name[DPW][MAX] =
            { "Sunday", "Monday", "Tuesday",
              "Wednesday", "Thursday",
              "Friday", "Saturday"
            };


#pragma argsused
void main()
{

    weekday Dir;
    weekday DDD;
    Dir.Display();
    DDD.Display();
    getch();

}

 

실행 결과

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

 

활용팁

  • static 멤버는 객체를 생성하지 않고도 클래스이름::멤버이름 형태로 접근할 수 있습니다. (예: weekday::day_name)
  • 프로그램 전체에서 공유되는 상수 데이터(예: 설정값, 상수 테이블)를 클래스 내에 캡슐화하여 관리하고 싶을 때 static const 멤버가 매우 유용합니다.