본문 바로가기
유니티 공부/C# 문법

C# - 클래스(Class)와 구조체(Struct)의 차이

by 코딩하는 돼징 2024. 3. 29.
반응형

01 가장 큰 차이점은 상속 가능의 여부

구조체는 상속이 안된다. 그렇다면 구조체가 필요없는거 아닐까? C와 C# 간의 호환성 때문에 C#에서도 C코드를 돌릴 수 있도록 남겨둔 것이다.

02 타입 여부

구조체는 값 타입, 클래스는 참조 타입이다.


간단한 예시로 알아보자

재산이 많은 할아버지가 자손에게 재산을 상속하고 싶은데 알고보니 재산이 구조체로 선언되어있어서 재산을 상속할 수 없다. 아래와 같이 코드를 작성하면 오류가 난다.

struct Father
{
    public void fathermoney()
    {
    }
}

struct Son : Father
{
    public void sonmoney()
    {
    }
}

class main
{
    public static void Main()
    {
        Father father;
        father.fathermoney();
        
        Son son;
        son.sonmoney();
     }
}

상속을 받을 수 있도록 변경해보자

class Father
{
    public void fathermoney()
    {
        Console.WriteLine("아버지 재산");
    }
}

class Son : Father
{
    public void sonmoney()
    {
        Console.WriteLine("아들 재산");
    }
}

class main
{
    public static void Main()
    {
        Father father = new Father(); // new키워드를 써서 메모리를 할당
        father.fathermoney();
        
        Son son = new Son();
        son.sonmoney();
        son.fathermoney(); // 아빠 재산에 접근 가능
     }
}

 

결과적으로

구조체는 스택에 바로 할당되기 때문에 가비지 컬렉션이 발생하지 않고 클래스는 인스턴스를 생성할 때마다 힙 메모리에 할당되므로 값을 폐기하기 위해서는 가비지 컬렉션이 필요하다.

그렇다면 구조체만 사용하는게 좋을까? 아니다. 스택의 크기는 제한적이기 때문에 너무 많은 양을 가지고 있다면 스택 오버플로우가 발생할 수 있다.

반응형

댓글