[C#] Static이란 무엇인가?
C#
2024. 8. 6.

C#에서 static 키워드를 사용하면 해당 멤버(변수, 메서드, 클래스 등)가 특정 객체 인스턴스가 아닌 클래스 자체에 속하게 됩니다. 이는 여러 가지 중요한 차이를 만들어냅니다.

static 키워드를 사용하는 경우와 사용하지 않는 경우의 차이점

1. static 멤버

  • 정적 멤버는 클래스의 인스턴스와 무관하게 클래스 자체에 속합니다.
  • 클래스 이름을 통해 직접 접근할 수 있습니다.
  • 정적 멤버는 모든 인스턴스에서 공유됩니다.
  • 객체를 생성하지 않고 사용할 수 있습니다.

예제

csharp코드 복사
public class MyClass
{
    public static int StaticValue = 10;
    public int InstanceValue = 20;

    public static void StaticMethod()
    {
        Console.WriteLine("This is a static method.");
    }

    public void InstanceMethod()
    {
        Console.WriteLine("This is an instance method.");
    }
}

public class Program
{
    public static void Main()
    {
        // Static members are accessed using the class name
        Console.WriteLine(MyClass.StaticValue);
        MyClass.StaticMethod();

        // Instance members are accessed using an instance of the class
        MyClass obj = new MyClass();
        Console.WriteLine(obj.InstanceValue);
        obj.InstanceMethod();
    }
}

출력

csharp코드 복사
10
This is a static method.
20
This is an instance method.

2. 인스턴스 멤버

  • 인스턴스 멤버는 클래스의 각 인스턴스에 속합니다.
  • 각 인스턴스는 자신의 복사본을 가집니다.
  • 인스턴스 멤버에 접근하려면 클래스의 인스턴스를 생성해야 합니다.

주요 차이점 요약

  1. 접근 방식:
    • 정적 멤버: 클래스 이름을 통해 접근 (MyClass.StaticMethod()).
    • 인스턴스 멤버: 클래스 인스턴스를 통해 접근 (myObject.InstanceMethod()).
  2. 메모리 할당:
    • 정적 멤버: 클래스 로드 시 메모리에 할당, 모든 인스턴스에서 공유.
    • 인스턴스 멤버: 각 인스턴스가 생성될 때마다 메모리에 할당, 각 인스턴스마다 별도로 존재.
  3. 공유 여부:
    • 정적 멤버: 클래스의 모든 인스턴스가 동일한 정적 멤버를 공유.
    • 인스턴스 멤버: 각 인스턴스는 고유한 인스턴스 멤버를 가짐.
  4. 초기화 시점:
    • 정적 멤버: 클래스가 처음 로드될 때 초기화.
    • 인스턴스 멤버: 각 인스턴스가 생성될 때 초기화.