C#에서 class와 struct는 모두 데이터와 함수를 포함하는 사용자 정의 데이터 형식입니다. 하지만 두 형식에는 몇 가지 중요한 차이점이 있습니다.
class와 struct의 주요 차이점
특징 | class | struct |
크기 | 객체 헤더와 데이터로 구성되어 있어 일반적으로 struct보다 크기가 큽니다. | 데이터로만 구성되어 있어 일반적으로 class보다 크기가 작습니다. |
포인터 | 객체는 포인터를 통해 참조됩니다. | 구조체는 값으로 전달됩니다. |
참조 투명성 | 객체의 값을 수정하면 참조하는 모든 객체의 값이 수정됩니다. | 구조체의 값을 수정하면 원본 구조체의 값만 수정됩니다. |
상속 | class는 상속을 지원합니다. | struct는 상속을 지원하지 않습니다. |
포함 | class는 다른 class를 포함할 수 있습니다. | struct는 다른 struct를 포함할 수 없습니다. |
정적 멤버 | class는 정적 멤버를 지원합니다. | struct는 정적 멤버를 지원하지 않습니다. |
인터페이스 구현 | class는 인터페이스를 구현할 수 있습니다. | struct는 인터페이스를 구현할 수 있습니다. |
크기
class는 객체 헤더와 데이터로 구성되어 있어 일반적으로 struct보다 크기가 큽니다. 객체 헤더는 객체의 참조 계수와 객체의 생성자와 소멸자를 호출하는 데 사용되는 포인터를 포함합니다.
포인터
class는 객체는 포인터를 통해 참조됩니다. 따라서 class를 함수의 인수로 전달하거나 다른 변수에 할당하면 포인터가 전달되거나 할당됩니다.
struct는 구조체는 값으로 전달됩니다. 따라서 struct를 함수의 인수로 전달하거나 다른 변수에 할당하면 구조체의 값이 전달되거나 할당됩니다.
참조 투명성
class의 값을 수정하면 참조하는 모든 객체의 값이 수정됩니다. 이는 class가 포인터를 통해 참조되기 때문입니다.
struct의 값을 수정하면 원본 구조체의 값만 수정됩니다. 이는 struct가 값으로 전달되기 때문입니다.
상속
class는 상속을 지원합니다. 따라서 class는 다른 class를 상속할 수 있습니다.
struct는 상속을 지원하지 않습니다. 따라서 struct는 다른 struct를 상속할 수 없습니다.
포함
class는 다른 class를 포함할 수 있습니다. 따라서 class는 다른 class의 멤버를 사용할 수 있습니다.
struct는 다른 struct를 포함할 수 없습니다. 따라서 struct는 다른 struct의 멤버를 사용할 수 없습니다.
정적 멤버
class는 정적 멤버를 지원합니다. 정적 멤버는 인스턴스에 종속되지 않고 클래스에 직접 속하는 멤버입니다.
struct는 정적 멤버를 지원하지 않습니다.
인터페이스 구현
class는 인터페이스를 구현할 수 있습니다. 인터페이스는 클래스의 추상적인 정의입니다.
struct는 인터페이스를 구현할 수 있습니다.
결론
class와 struct는 모두 사용자 정의 데이터 형식이지만 몇 가지 중요한 차이점이 있습니다. class는 일반적으로 struct보다 크기가 크고, 객체 헤더와 포인터를 사용하여 참조되며, 참조 투명성이 있으며, 상속과 포함을 지원합니다. struct는 일반적으로 class보다 크기가 작고, 값으로 전달되며, 참조 투명성이 없으며, 상속과 포함을 지원하지 않습니다.
'C#' 카테고리의 다른 글
객체 생성 : Activator.CreateInstance와 new(T) (0) | 2023.12.16 |
---|---|
C# 비트 연산 : enum을 flag로 활용하는 방법 (0) | 2023.12.11 |
C# Linked List (0) | 2023.12.02 |
C# 11.0의 required modifier (0) | 2023.11.10 |
C# 6.0 정적 멤버 직접 사용 (2) | 2023.11.09 |