내가 일하며 알게 된 프로그래밍
article thumbnail
Published 2023. 8. 3. 00:10
Struct와 Class의 차이 프로그래밍/C#

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
profile

내가 일하며 알게 된 프로그래밍

@CtrlVGames