c#에 대해
- C#은 C++의 연산력(coumputing power)과 Visual Basic의 편의성(convenience)을 결합하기 위한 목적으로 MS사에서 닷넷(.NET) 프레임워크를 기반으로 개발한 객체지향 프로그래밍 언어이다.
클래스와 구조체
클래스
- 상속이 가능하다
- 참조 형식(힙 영역 메모리에 주소값을 가지고 있다)
- 가비지컬렉터에 의해 메모리관리가 된다.
구조체
- 상속 불가능
- 값 형식(스택 영역에 값이 그대로 저장된다.)
- 코드 블럭이 닫히는 순간 메모리 해제된다.
차이
- 큰 차이는 크게 2가지가 있다.
- 구조체(Struct)는 상속을 할 수 없다.
- 클래스(Class) 객체는 힙(Heap)에 할당되지만 구조체(Struct) 객체는 스택(Stack)에 할당된다.
- 스택의 경우 사용할 수 있는 메모리 크기가 작고 한정적인 반면 힙은 많은 메모리 크리를 가질 수 있다. 하지만 스택의 경우 가비지 컬렉션에 의해 관리되지 않기 때문에 성능상 많은 장점이 있다.
예외
- 구조체로 선언을 했어도 객체를 힙영역에 메모리를 할당할 때가 있다.
- 모든 필드의 합이 16Byte를 넘는 경우
- 구조체 안에 클래스 타입을 필드로 가질 경우
결론
- C#에서는 예외의 경우와 상속이 필요한 경우가 아닌 경우라면 구조체로 선언해서 스택(Stack) 메모리 영역을 사용하기를 권장
- 스택은 기본적으로 가비지 컬렉션이 자동으로 메모리를 해제시켜주긴 하지만 많은 오버헤드가 발생할 수 있다.