C#을 배우다 보면 클래스(Class)와 구조체(Struct) 중 어떤 것을 사용해야 할지 고민하게 됩니다. 두 형식은 비슷해 보이지만 메모리 할당 방식과 동작에서 중요한 차이가 있습니다. 이 글에서는 각 형식의 개념과 핵심 차이점을 명확하게 정리해 드립니다.
클래스(Class)란?
클래스는 데이터 형식을 만들기 위한 일종의 설계도입니다. 클래스 정의는 class 키워드로 시작하며 그 뒤에 클래스 이름이 옵니다. 클래스는 참조 형식(reference type)으로, 객체가 힙(heap)에 할당되고 변수에는 실제 데이터가 아닌 해당 객체에 대한 참조가 저장됩니다.
구조체(Struct)란?
구조체는 값 형식(value type) 데이터입니다. 하나의 변수에 서로 다른 데이터 형식의 관련 데이터를 함께 담을 수 있어 유용합니다. 구조체는 struct 키워드를 사용하여 선언하며, 일반적으로 스택(stack)에 할당되어 클래스보다 가볍게 동작하는 경우가 많습니다.
클래스와 구조체의 주요 차이점
참조 형식 vs 값 형식: 클래스는 참조 형식이고, 구조체는 값 형식입니다. 값 형식은 대입 시 데이터가 복사되지만, 참조 형식은 같은 객체를 가리키게 됩니다.
상속 지원 여부: 구조체는 상속을 지원하지 않습니다. 반면 클래스는 다른 클래스를 상속받아 확장할 수 있습니다.
기본 생성자: 구조체에는 매개변수가 없는 기본 생성자를 직접 정의할 수 없습니다.
인스턴스화 방식: new 연산자로 구조체 객체를 생성하면 객체가 만들어지고 적절한 생성자가 호출됩니다. 하지만 클래스와 달리 구조체는 new 연산자 없이도 인스턴스를 생성할 수 있습니다.
차이점 한눈에 비교하기
| 구분 | 클래스(Class) | 구조체(Struct) |
|---|---|---|
| 형식 종류 | 참조 형식 | 값 형식 |
| 상속 | 지원함 | 지원하지 않음 |
| 기본 생성자 정의 | 가능 | 불가능 |
| new 없이 인스턴스화 | 불가능 | 가능 |
마무리
간단한 데이터 묶음이나 성능이 중요한 소규모 데이터에는 구조체가 적합하고, 상속·다형성 등 객체지향 기능이 필요하거나 데이터 크기가 큰 경우에는 클래스를 사용하는 것이 좋습니다. 두 형식의 특성을 잘 이해하고 상황에 맞게 선택하면 더 효율적인 C# 코드를 작성할 수 있습니다.