[C#] 클래스와 구조체

SeoTae·2023년 6월 26일
0

이것저것

목록 보기
8/10
post-thumbnail

c#에 대해

  • C#은 C++의 연산력(coumputing power)과 Visual Basic의 편의성(convenience)을 결합하기 위한 목적으로 MS사에서 닷넷(.NET) 프레임워크를 기반으로 개발한 객체지향 프로그래밍 언어이다.

클래스와 구조체

클래스

  • 상속이 가능하다
  • 참조 형식(힙 영역 메모리에 주소값을 가지고 있다)
  • 가비지컬렉터에 의해 메모리관리가 된다.

구조체

  • 상속 불가능
  • 값 형식(스택 영역에 값이 그대로 저장된다.)
  • 코드 블럭이 닫히는 순간 메모리 해제된다.

차이

  • 큰 차이는 크게 2가지가 있다.
  • 구조체(Struct)는 상속을 할 수 없다.
  • 클래스(Class) 객체는 힙(Heap)에 할당되지만 구조체(Struct) 객체는 스택(Stack)에 할당된다.
  • 스택의 경우 사용할 수 있는 메모리 크기가 작고 한정적인 반면 힙은 많은 메모리 크리를 가질 수 있다. 하지만 스택의 경우 가비지 컬렉션에 의해 관리되지 않기 때문에 성능상 많은 장점이 있다.

예외

  • 구조체로 선언을 했어도 객체를 힙영역에 메모리를 할당할 때가 있다.
  • 모든 필드의 합이 16Byte를 넘는 경우
  • 구조체 안에 클래스 타입을 필드로 가질 경우

결론

  • C#에서는 예외의 경우와 상속이 필요한 경우가 아닌 경우라면 구조체로 선언해서 스택(Stack) 메모리 영역을 사용하기를 권장
  • 스택은 기본적으로 가비지 컬렉션이 자동으로 메모리를 해제시켜주긴 하지만 많은 오버헤드가 발생할 수 있다.
profile
Vamos🔥🔥🔥🔥🔥

0개의 댓글