C#에서 구조체(Structure)는 값 형식(value type) 데이터 타입입니다. 구조체를 활용하면 서로 관련된 다양한 데이터 타입의 값을 하나의 변수에 담아 관리할 수 있으며, struct 키워드를 사용하여 생성합니다.
반면 클래스(Class)를 정의한다는 것은 특정 데이터 타입의 설계도(blueprint)를 만드는 것을 의미합니다. 그렇다면 C#에서 클래스와 구조체는 어떤 점이 다를까요?
클래스와 구조체의 주요 차이점
- 메모리 할당 방식 — 클래스는 참조 형식(reference type)이고, 구조체는 값 형식(value type)입니다. 즉, 클래스 객체는 힙(heap)에 할당되어 참조가 전달되지만, 구조체는 스택(stack)에 값 자체가 복사됩니다.
- 상속 불가 — 구조체는 다른 구조체나 클래스를 상속할 수 없으며, 반대로 다른 구조체나 클래스의 기반(base)으로 사용될 수도 없습니다. 단, 인터페이스는 구현할 수 있습니다.
- 인스턴스 생성 방식 —
new연산자를 사용해 구조체 객체를 생성하면 해당 생성자가 호출됩니다. 하지만 클래스와 달리 구조체는new연산자 없이도 인스턴스화할 수 있다는 점이 특징입니다.
- 기본 생성자 제한 — 구조체에는 매개변수가 없는 기본 생성자(default constructor)를 정의할 수 없습니다.
언제 구조체를 사용해야 할까?
일반적으로 크기가 작고 불변(immutable)으로 취급되는 데이터, 예를 들어 좌표(Point), 색상(Color), 날짜 정보처럼 간단한 값을 표현할 때는 구조체가 효율적입니다. 반면 상속이 필요하거나 객체 간 참조 공유가 필요한 복잡한 로직에는 클래스를 사용하는 것이 바람직합니다.