C#에서 class와 struct의 차이점

2023. 12. 6. 11:02·C#
반응형

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
'C#' 카테고리의 다른 글
  • 객체 생성 : Activator.CreateInstance와 new(T)
  • C# 비트 연산 : enum을 flag로 활용하는 방법
  • C# Linked List
  • C# 11.0의 required modifier
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (597) N
      • 상품 추천 (105) N
      • MongoDB (4)
      • 하드웨어 (9)
      • 일기장 (4)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • 파이썬 (12) N
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (50)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    cv2
    programming101
    codingcommunity
    긴유통기한우유
    C#
    learntocode
    스마트스토어리뷰
    유니티
    unity
    셀레니움
    파이썬
    쇼핑몰리뷰
    programmerlife
    ipcamera
    라떼우유
    codingtips
    appdevelopment
    Python
    리뷰이관
    리뷰관리
    카페24리뷰이관
    리스트
    devlife
    스크립트 실행
    list
    믈레코비타멸균우유
    카페24리뷰
    상품 리뷰 크롤링
    스크립트 실행 순서
    rtsp
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
C#에서 class와 struct의 차이점
상단으로

티스토리툴바