본문 바로가기

C#

C# 인스턴스 멤버와 정적 멤버의 메모리 차이

C#에서 클래스 멤버는 주로 인스턴스 멤버와 정적 멤버로 나뉩니다. 이 두 멤버는 메모리 할당 방식과 생명 주기에서 차이가 있습니다. 이번 글에서는 이 차이를 간단하고 명확하게 살펴보겠습니다.

1. 인스턴스 멤버 메모리

인스턴스 멤버는 클래스의 객체를 생성할 때마다 별도의 메모리가 할당됩니다. 따라서 같은 클래스의 여러 객체가 존재하면, 각 객체는 자신의 인스턴스 멤버 값을 독립적으로 가집니다.

class Person
{
    public string Name; // 인스턴스 멤버
}

Person p1 = new Person();
p1.Name = "Alice";

Person p2 = new Person();
p2.Name = "Bob";

위 예시에서 p1과 p2는 각각 독립적인 Name 공간을 갖습니다.

2. 정적 멤버 메모리

정적 멤버(static)는 클래스 자체에 속하며, 프로그램 실행 시 클래스가 메모리에 로딩될 때 한 번만 할당됩니다. 모든 객체가 정적 멤버를 공유하므로, 값 변경 시 전체 인스턴스에 영향을 미칩니다.

class Person
{
    public static int Count; // 정적 멤버
}

Person.Count = 2;

모든 Person 객체에서 Count는 동일한 메모리를 참조합니다.

3. 요약

  • 인스턴스 멤버: 각 객체마다 별도 메모리 할당
  • 정적 멤버: 클래스당 한 번만 메모리 할당, 모두 공유

이러한 메모리 차이를 이해하면 성능 최적화 및 객체 설계에 큰 도움이 됩니다.