메모리 할당 방식
- 구조체: 값 형식으로, 스택에 할당됩니다. 변수에 할당하거나 메서드에 전달될 때 실제 데이터가 복사됩니다.
- 클래스: 참조 형식으로. 힙에 할당됩니다. 변수에 할당되거나 메서드에 전달될 때 객체에 대한 참조가 전달됩니다.
상속
- 구조체: 상속을 지원하지 않습니다.
- 클래스: 상속을 지원합니다.
생성자
- 구조체: 기본 생성자(매개변수가 없는 생성자)를 정의할 수 없습니다.
- 클래스: 기본 생성자를 포함하여, 다양한 생성자 정의할 수 있습니다.
할당과 복사
- 구조체: 구조체의 인스턴스를 다른 변수에 할당하거나 메서드에 전달할 때 값이 복사됩니다. 즉, 두 변수는 독립적인 메로리 공간을 사용합니다.
- 클래스: 클래스의 인스턴스를 다른 변수에 할당하거나 메서드에 전달할 때 참조가 복사됩니다. 즉, 두 변수는 같은 객체를 가리키게 됩니다.
디폴트 값
- 구조체: 모든 필드는 자동으로 기본값으로 초기화됩니다.
- 클래스: 명시적으로 초기화하지 않으면 null로 초기화됩니다.
불변성
- 구조체: 불변성을 유지하는 것이 권장됩니다.
- 클래스: 불변성은 선택 사항이며, 클래스는 보통 상태를 나타내고, 상태를 변경하는 메서드를 포함합니다.
성능
- 구조체: 작은 크기의 간단한 데이터를 처리할 때 더 효율적입니다. 스택에 할당되므로 메모리 관리가 더 빠를 수 있습니다. 하지만 크거나 복잡한 데이터를 처리할 때는 성능이 저하될 수 있습니다.
- 클래스: 복잡한 데이터 구조를 처리하는 데 적합합니다. 힙에 할당되므로 메모리 관리가 유연하며, GC에 의해 관리됩니다.
요약
구조체는 값 형식으로, 작은 데이터 구조를 효율적으로 처리하기 위해 설계되었으며, 스택에 할당됩니다.
클래스는 참조 형식으로, 더 복잡한 데이터를 처리할 수 있으며, 힙에 할당됩니다.
'C#' 카테고리의 다른 글
[C#] IEnumerable vs IEnumerator (0) | 2024.08.17 |
---|---|
[C#] 제네릭(Generic)이란 무엇인가? (0) | 2024.08.16 |
[C#] 상속 키워드 (0) | 2024.08.13 |
[C#] API를 호출할 때 "Malformed URL" 오류가 발생하는 이슈 (0) | 2024.08.12 |
[C#] 빈 문자열인지 확인하는 방법 (0) | 2024.08.08 |