C#에서 멤버 함수를 static 키워드로 선언하면 그 함수는 정적(static) 메서드가 됩니다. 정적 메서드는 오직 정적 변수에만 접근할 수 있으며, 클래스의 객체가 생성되기 전에도 이미 존재합니다. 즉, 객체를 만들지 않고도 클래스 이름을 통해 바로 호출할 수 있다는 것이 가장 큰 특징입니다.
정적 클래스란?
정적 클래스는 인스턴스화(instantiation)할 수 없으며, 오직 정적 멤버만 포함할 수 있습니다. 따라서 유틸리티 성격의 기능이나 공용 데이터를 다룰 때 유용하게 활용됩니다.
정적 메서드 선언 방법
정적 메서드는 static 키워드를 사용하여 다음과 같이 선언합니다.
public static int getNum() {
return num;
}정적 메서드와 비정적 메서드 예제
다음 예제는 C#에서 정적 메서드와 비정적(non-static) 메서드를 함께 사용하는 방법을 보여줍니다.
using System;
namespace StaticVarApplication {
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();
s.count();
s.count();
s.count();
Console.WriteLine("Variable num: {0}", StaticVar.getNum());
Console.ReadKey();
}
}
}코드 설명
- num 변수:
public static int num;으로 선언된 정적 변수로, 모든 객체가 하나의 값을 공유합니다. - count() 메서드: 비정적 인스턴스 메서드로, 객체를 생성한 후에만 호출할 수 있으며 호출될 때마다
num값을 1씩 증가시킵니다. - getNum() 메서드: 정적 메서드이므로 객체 생성 없이
StaticVar.getNum()형태로 클래스 이름을 통해 직접 호출할 수 있습니다. - Main() 메서드: 프로그램 진입점으로, 본질적으로 정적 메서드입니다.
실행 결과
Variable num: 6
count() 메서드가 여섯 번 호출되었기 때문에 정적 변수 num의 최종 값은 6이 출력됩니다.
정적 메서드와 비정적 메서드의 핵심 차이
| 구분 | 정적 메서드 (Static) | 비정적 메서드 (Non-Static) |
|---|---|---|
| 호출 방식 | 클래스 이름으로 직접 호출 | 객체를 생성한 후 호출 |
| 접근 가능 범위 | 정적 변수 및 정적 멤버만 접근 가능 | 정적·비정적 멤버 모두 접근 가능 |
| 메모리 할당 | 프로그램 시작 시 로드됨 | 객체 생성 시 할당됨 |
| this 키워드 사용 | 사용 불가 | 사용 가능 |
정적 메서드는 객체 상태와 무관한 공통 기능을 구현할 때, 비정적 메서드는 각 객체 고유의 상태를 다루는 동작을 구현할 때 적합합니다. 두 메서드의 특성을 잘 이해하고 상황에 맞게 활용하면 더욱 효율적인 C# 코드를 작성할 수 있습니다.