Struct와 Class의 차이를 깊게 생각하지 않고 사용한다면 단순한 객체로 활용할 것이다.
이번엔 두 기능의 차이점에 대해 알아보자.
1. 형식
Struct : ‘구조체 형식’은 데이터와 관련 기능을 캡슐화할 수 있는 값 형식입니다. 구조체 형식은 struct 키워드를 사용하여 정의
값 형식 - C# 참조
값 형식과 참조 형식, 값 형식의 종류, C#의 기본 제공 값 형식
learn.microsoft.com
Class : 클래스는 참조 형식 으로 데이터에 대한 참조를 저장
참조 형식 - C# 참조
참조 형식(C# 참조) 아티클 04/07/2023 기여자 12명 피드백 이 문서의 내용 --> C# 형식은 참조 형식과 값 형식 두 가지가 있습니다. 참조 형식의 변수에는 데이터(개체)에 대한 참조가 저장되며, 값 형
learn.microsoft.com
2. 메모리 할당
1번의 형식 차이로 인해 메모리의 저장하는 영역이 다르다
Struct : 스택 영역에 메모리가 할당되며, 값을 복사하는 경우 값이 복사된다
Class : 힙 영역에 메모리가 할당되며, 참조를 복사하는 경우 같은 객체를 참조하게 된다.
3. 상속 여부
Struct : 다른 구조체를 포함하는 것은 가능하지만, 상속을 받을 수는 없다.
Class : 상속 가능
4. 초기화
두 가지 모두 생성자를 활용하여 초기화 할 수 있지만 기본 생성자의 제공 여부로 갈린다.
Struct : 기본 생성자가 항상 제공된다.
Class : 기본 생성자를 명시적으로 정의해야한다.
**기본 생성자 : 매개 변수를 사용하지 않는 생성자
예시 코드
public struct StructTest
{
public int value;
public StructTest(int v)
{
value = v;
}
}
public class ClassTest
{
public int value;
public ClassTest(int v)
{
value = v;
}
}
위처럼 기본 생성자를 둘 다 명시적으로 선언하지 않은 상태에서라면
public void Main()
{
StructTest st = new StructTest(); //기본 생성자가 자동으로 제공되기에 에러 발생하지 않음
ClassTest ct = new ClassTest(); //컴파일 에러 발생
}
Class에서만 기본 생성자의 컴파일 에러가 발생한다.
5. Null 지원 여부
Struct : null 값을 가질 수 없음
Class : null 값을 가질 수 있음
정리
일반적으로,
구조체는 작은 크기의 데이터를 저장하고 간단한 값 형태로 사용할 때 유용,
클래스는 복잡한 객체를 표현하고 상속과 다형성을 사용해야 할 때 유용하다.
'프로그래밍 > C#' 카테고리의 다른 글
Partial Class를 사용하는 이유 (0) | 2023.08.01 |
---|---|
C#과 다중 상속 (0) | 2023.08.01 |
Static 클래스 (0) | 2023.07.31 |
C# Array, List, ArrayList 차이 (0) | 2023.04.23 |
C# String과 StringBuilder (0) | 2023.04.15 |