Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 클래스(Class)와 구조체(Struct)의 차이점 완벽 정리

C#에서 클래스와 구조체의 차이점

C#에서 클래스(Class)구조체(Structure)를 구분하려면, 먼저 두 개념이 데이터를 정의하고 저장하는 측면에서는 사실상 동등한 역할을 한다는 점을 이해해야 합니다. 두 형식 모두 데이터 멤버를 정의할 수 있으며 기본값을 가질 수 있습니다.

그러나 이 범위를 넘어 더 깊이 살펴보면, 클래스가 구조체보다 훨씬 더 많은 유연성과 다양한 기능을 제공한다는 것을 알 수 있습니다. 아래 표는 클래스와 구조체의 핵심적인 차이점을 정리한 것입니다.

클래스 vs 구조체 주요 차이점 비교표

번호구분 기준클래스(Class)구조체(Structure)
1데이터 타입클래스에 정의된 데이터는 메모리에 참조(reference) 형태로 저장되며, 접근을 위한 특정 주소를 가집니다. 따라서 클래스는 참조 타입(Reference Type)이라고 할 수 있습니다.반면 구조체에서는 데이터 멤버의 값이 스택(stack) 또는 이를 포함하는 형식 내부에 직접 저장됩니다. 따라서 구조체는 값 타입(Value Type)으로 간주됩니다.
2저장 위치앞서 언급했듯이 클래스의 데이터 멤버는 참조 형태로 저장되며, 참조 타입은 힙(heap) 메모리에 할당됩니다.반면 구조체는 값을 직접 저장하므로, 값 타입은 스택(stack) 메모리에 할당됩니다.
3생성자클래스는 생성자(Constructor)뿐만 아니라 소멸자(Destructor)도 함께 정의할 수 있습니다. 해당 기능이 구현되어 있기 때문입니다.반면 구조체는 전통적으로 생성자나 소멸자를 지원하지 않았습니다. 단, 최신 C# 버전(C# 10 이상)에서는 매개변수 없는 생성자 선언이 가능해졌지만, 소멸자는 여전히 지원되지 않습니다.
4인스턴스화클래스는 생성자와 함께 설계되었기 때문에 new 키워드를 사용하여 인스턴스를 생성해야 합니다.반면 구조체는 new 키워드 없이도 인스턴스를 생성할 수 있습니다.
5상속클래스는 상속(Inheritance) 기능을 지원하므로, 부모 클래스로부터 속성과 동작을 물려받을 수 있습니다.반면 구조체는 상속을 지원하지 않습니다.
6protected 한정자클래스는 protected 한정자를 지원하므로, 클래스 내부에 정의된 데이터 멤버에 이를 적용할 수 있습니다.반면 구조체는 protected 한정자를 지원하지 않습니다.

정리

요약하자면, 상속이나 다형성 같은 객체지향 기능이 필요한 복잡한 객체를 다룰 때는 클래스가 적합하고, 좌표나 색상 값처럼 작고 단순한 데이터 묶음을 다룰 때는 구조체를 사용하는 것이 효율적입니다. 두 형식의 메모리 할당 방식과 기능적 차이를 잘 이해하고 상황에 맞게 선택하는 것이 중요합니다.