[C#] 구조체(Struct) vs 클래스(Class)
C#
2024. 8. 15.

메모리 할당 방식

  • 구조체: 값 형식으로, 스택에 할당됩니다. 변수에 할당하거나 메서드에 전달될 때 실제 데이터가 복사됩니다.
  • 클래스: 참조 형식으로. 힙에 할당됩니다. 변수에 할당되거나 메서드에 전달될 때 객체에 대한 참조가 전달됩니다.

 

상속

  • 구조체: 상속을 지원하지 않습니다.
  • 클래스: 상속을 지원합니다.

 

생성자

  • 구조체: 기본 생성자(매개변수가 없는 생성자)를 정의할 수 없습니다.
  • 클래스: 기본 생성자를 포함하여, 다양한 생성자 정의할 수 있습니다.

 

할당과 복사

  • 구조체: 구조체의 인스턴스를 다른 변수에 할당하거나 메서드에 전달할 때 값이 복사됩니다. 즉, 두 변수는 독립적인 메로리 공간을 사용합니다.
  • 클래스: 클래스의 인스턴스를 다른 변수에 할당하거나 메서드에 전달할 때 참조가 복사됩니다. 즉, 두 변수는 같은 객체를 가리키게 됩니다.

 

디폴트 값

  • 구조체: 모든 필드는 자동으로 기본값으로 초기화됩니다.
  • 클래스: 명시적으로 초기화하지 않으면 null로  초기화됩니다.

 

불변성

  • 구조체: 불변성을 유지하는 것이 권장됩니다.
  • 클래스: 불변성은 선택 사항이며, 클래스는 보통 상태를 나타내고, 상태를 변경하는 메서드를 포함합니다.

 

성능

  • 구조체: 작은 크기의 간단한 데이터를 처리할 때 더 효율적입니다. 스택에 할당되므로 메모리 관리가 더 빠를 수 있습니다. 하지만 크거나 복잡한 데이터를 처리할 때는 성능이 저하될 수 있습니다.
  • 클래스: 복잡한 데이터 구조를 처리하는 데 적합합니다.  힙에 할당되므로 메모리 관리가 유연하며, GC에 의해 관리됩니다.

 

요약

구조체값 형식으로, 작은 데이터 구조를 효율적으로 처리하기 위해 설계되었으며, 스택에 할당됩니다.

클래스참조 형식으로, 더 복잡한 데이터를 처리할 수 있으며, 에 할당됩니다.