[C#] 클래스와 구조체의 차이

YongSeok·2022년 10월 15일
0

클래스와 구조체의 차이1

  • 상속기능의 존재여부
  • C와 C#간의 호환성 때문에 남겨움 (C#에서도 C코드를 돌릴 수 있도록 만듬)

클래스와 구조체의 차이2

  • 구조체는 값타입이며
  • 클래스는 참조타입이다

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


class Temp
{
    public int a;
}
public class Program : MonoBehaviour
{
    
    int a = 10; 		// 값타입 : a 에 바로 10이라는 값을 할당할 수 있다.

    Temp temp.a = 10;   // 참조타입 : 아직 10이 들어갈 메모리가 할당되지 않았기 떄문 에러발생

}

☝ 값타입 메모리와 참조타입 메모리의 차이

  • Temp클래스의 변수는 에러가 발생한다 이것을 해결하기위해선 새로운 메모리를 할당해주어야 한다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class Temp
{
    public int a;
}
public class Program : MonoBehaviour
{
    
    int a = 10;             // 값타입 : a 에 바로 10이라는 값을 할당할 수 있다.

    //Temp temp.a = 10;     // 참조타입 : 아직 10이 들어갈 메모리가 할당되지 않았기 떄문
    Temp temp = new Temp(); // new 키워드를 이용해서 메모리를 할당!
    
    void Start()
    {
        temp.a = 10;
    }
}

☝ new 키워드를 활용해 메모리를 할당


👇 구조체 예시코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

struct 할아버지
{
    public void 할아버지재산()
    {
        Debug.Log("[1] 할아버지 재산");
    }
}
struct 아버지
{
    public void 아버지재산()
    {
        Debug.Log("[2] 아버지 재산");
    }
}
struct 아들
{
    public void 아들재산()
    {
        Debug.Log("[3] 아들 재산");
    }
}

public class Program : MonoBehaviour
{
    할아버지 grandFather;
    아버지 father;
    아들 son;
    
    void Awake()
    {
        grandFather.할아버지재산();
        father.아버지재산();
        son.아들재산();            
    }
}

구조체는 값타입 이므로 new로 따로 메모리 할당을 안해주어도 에러가 나지 않는다 그러나 클래스처럼 서로 상속을 받지 못한다

👇 클래스 예시 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

class 할아버지
{
    public void 할아버지재산()
    {
        Debug.Log("[1] 할아버지 재산");
    }
}
class 아버지 : 할아버지
{
    public void 아버지재산()
    {
        Debug.Log("[2] 아버지 재산");
    }
}
class 아들 : 아버지
{
    public void 아들재산()
    {
        Debug.Log("[3] 아들 재산");
    }
}

public class Program : MonoBehaviour
{
    할아버지 grandFather;
    아버지 father;
    아들 son;
    
    void Awake()
    {
        grandFather = new 할아버지();
        father = new 아버지();
        son = new 아들();

        grandFather.할아버지재산();
        father.아버지재산();
        son.아들재산();
    }
}

클래스는 상속을 받고있기에 son.할아버지재산(); 도 가능하다

0개의 댓글