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

C# 정적(static) 멤버 함수란? 개념부터 예제까지 한눈에 보기

C# 정적 멤버 함수의 기본 개념

C#에서 정적(static) 멤버 함수는 특정 객체(인스턴스)에 속하지 않고 클래스 자체에 소속되는 함수입니다. 따라서 객체를 생성하기 전에도 이미 존재하며, 클래스 이름만으로 바로 호출할 수 있습니다.

정적 함수의 가장 중요한 특징은 다음과 같습니다.

  • 정적 변수만 접근 가능: 정적 함수 내부에서는 static으로 선언된 변수만 직접 다룰 수 있습니다. 일반 인스턴스 변수에는 접근할 수 없습니다.
  • 객체 생성 이전에 존재: 정적 함수는 프로그램 실행 시점에 메모리에 로드되므로, 객체가 만들어지기 전에도 사용할 수 있습니다.
  • 클래스 이름으로 호출: new 키워드로 인스턴스를 만들 필요 없이 클래스이름.함수이름() 형태로 호출합니다.

정적 함수는 아래와 같이 static 키워드를 붙여 선언합니다.

public static int getNum() {}

정적 함수 활용 예제

다음 예제는 정적 변수 num과 이를 읽어오는 정적 함수 getNum()을 함께 사용하는 모습을 보여줍니다.

Example

using System;

namespace Demo {
    class StaticVar {
        public static int num;

        public void count() {
            num++;
        }

        public static int getNum() {
            return num;
        }
    }

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

            s.count();
            s.count();
            s.count();

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

Output

Variable num: 3

코드 동작 원리 살펴보기

위 코드의 흐름을 단계별로 정리하면 다음과 같습니다.

  1. StaticVar 클래스에는 정적 변수 num이 선언되어 있으며, 모든 인스턴스가 이 값을 공유합니다.
  2. 일반(인스턴스) 메서드인 count()는 호출될 때마다 num을 1씩 증가시킵니다.
  3. 정적 함수 getNum()은 객체 없이 StaticVar.getNum() 형태로 호출되어 num의 현재 값을 반환합니다.
  4. count()가 세 번 호출되었으므로 최종 출력 결과는 Variable num: 3이 됩니다.

참고: Main 메서드가 static인 이유

C# 프로그램의 진입점인 Main 메서드가 반드시 static으로 선언되어야 하는 것도 같은 맥락입니다. 프로그램 시작 시점에는 어떤 객체도 존재하지 않기 때문에, 런타임이 객체 생성 없이 곧바로 호출할 수 있도록 정적 함수로 정의해야 합니다.

마무리

정적 멤버 함수는 객체 상태와 무관한 공용 데이터나 유틸리티 성격의 기능을 구현할 때 매우 유용합니다. 단, 정적 함수 안에서는 정적 멤버만 접근할 수 있다는 제약을 항상 기억하고, 인스턴스별 고유 데이터가 필요하다면 일반 메서드를 사용하는 것이 올바른 설계입니다.