C#에서 클래스(Class)와 구조체(Struct)는 매우 비슷해 보이지만, 실제로는 메모리 구조부터 사용 목적까지 완전히 다른 두 자료구조입니다.
실무에서도 둘의 차이를 잘 이해해야 적절한 선택을 할 수 있습니다.
필드(Field), 메서드(Method), 속성(Property) 등을 가질 수 있다.생성자(Constructor)를 선언할 수 있다.interface)를 구현할 수 있다.| 구분 | 클래스 (Class) | 구조체 (Struct) |
|---|---|---|
| 메모리 저장 위치 | 힙(Heap) — 참조 타입 | 스택(Stack) — 값 타입 |
| 타입 종류 | Reference Type | Value Type |
| 저장 방식 | 변수는 주소(참조)를 저장하고, 실제 데이터는 힙에 저장 | 값 자체가 스택에 저장됨 |
| 할당 방식 | 참조 복사 (같은 객체를 가리킴) | 값 복사 (완전히 독립적인 사본 생성) |
| 상속 지원 | 가능 (상속 구조 설계 가능) | 불가능 (인터페이스만 구현 가능) |
| 생성자 | 기본 생성자, 사용자 정의 생성자 모두 가능 | 사용자 정의 생성자 가능하지만 기본 생성자는 선언 불가 |
| 기본값 | null (참조 타입이므로) | 모든 필드가 0 또는 기본값으로 초기화 |
| 언제 사용? | 복잡한 데이터, 많은 기능, 상속이 필요한 경우 | 작고 가벼운 데이터 구조 (Vector, Point 등) |