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

C# 클래스의 정적 멤버(Static Member)란? 개념부터 예제까지

C# 정적 멤버란 무엇인가?

C#에서는 static 키워드를 사용하여 클래스 멤버를 정적(static)으로 정의할 수 있습니다. 클래스의 멤버를 static으로 선언하면, 해당 클래스의 객체를 몇 개를 생성하더라도 정적 멤버의 복사본은 단 하나만 존재합니다. 즉, 모든 객체가 이 하나의 멤버를 함께 공유하게 됩니다.

static 키워드는 "클래스당 멤버의 인스턴스가 오직 하나만 존재한다"는 의미를 담고 있습니다. 정적 변수는 클래스의 인스턴스를 생성하지 않고도 클래스 이름만으로 값을 참조할 수 있기 때문에 상수를 정의할 때 특히 유용합니다. 정적 변수는 멤버 함수 외부나 클래스 정의 외부에서 초기화할 수 있으며, 필요하다면 클래스 정의 내부에서 초기화하는 것도 가능합니다.

정적 멤버의 주요 특징

  • 객체 생성 횟수와 관계없이 멤버의 복사본은 하나만 유지됩니다.
  • 모든 객체가 동일한 정적 변수를 공유하므로, 한 객체에서 변경한 값이 다른 객체에도 그대로 반영됩니다.
  • 인스턴스를 만들지 않고 클래스이름.멤버이름 형태로 직접 접근할 수 있습니다.
  • 프로그램 전체에서 공통으로 사용하는 카운터, 설정값, 상수 등을 저장하기에 적합합니다.

예제 코드

다음 예제는 두 개의 객체가 정적 변수 num을 어떻게 공유하는지 보여줍니다.

using System;

namespace StaticVarApplication {
    class StaticVar {
        public static int num;

        public void count() {
            num++;
        }

        public int getNum() {
            return num;
        }
    }

    class StaticTester {
        static void Main(string[] args) {
            StaticVar s1 = new StaticVar();
            StaticVar s2 = new StaticVar();

            s1.count();
            s1.count();
            s1.count();

            s2.count();
            s2.count();
            s2.count();

            Console.WriteLine("Variable num for s1: {0}", s1.getNum());
            Console.WriteLine("Variable num for s2: {0}", s2.getNum());
            Console.ReadKey();
        }
    }
}

실행 결과

Variable num for s1: 6
Variable num for s2: 6

결과 분석

s1s2라는 서로 다른 두 객체를 생성했음에도 불구하고, 출력 결과는 두 객체 모두 6으로 동일합니다. 그 이유는 num이 정적 변수이기 때문입니다.

s1에서 count()를 세 번 호출하고, s2에서 다시 세 번 호출했으므로 공유된 num의 값은 총 6번 증가하여 6이 됩니다. 어느 객체를 통해 값을 조회하더라도 같은 변수를 참조하기 때문에 항상 동일한 결과가 출력되는 것입니다. 이것이 바로 C# 정적 멤버의 핵심 동작 방식입니다.