본문 바로가기

Unity/정보

[Unity 유니티] 유니티 클래스(Class) / 구조체(Struct) 차이점

유니티에서 프로그래밍을 하다 보면 클래스(Class)구조체(Struct) 중 어떤 것을 사용할지 고민하게 된다.

이 둘은 비슷해 보이지만 중요한 차이점이 있다.


클래스와 구조체의 주요 차이점

  1. 값 타입 vs 참조 타입
    • 구조체는 값 타입이다. 데이터를 직접 복사하여 사용하며, 메모리 스택에 저장된다.
    • 클래스는 참조 타입이다. 데이터의 주소를 참조하며, 메모리 힙에 저장된다.
  2. 상속
    • 구조체는 상속을 지원하지 않는다.
    • 클래스는 상속이 가능하다.
  3. 기본 생성자
    • 구조체는 기본 생성자를 제공하지 않으며, 매개변수가 없는 생성자를 직접 정의할 수 없다.
    • 클래스는 기본 생성자가 자동으로 생성된다.
  4. 사용 목적
    • 구조체는 간단한 데이터 저장이나 계산에 적합하다.
    • 클래스는 복잡한 데이터 구조나 객체 지향 프로그래밍에 적합하다.

코드 예시

- 클래스

using UnityEngine;

public class PlayerData
{
    public int health;
    public int mana;

    public PlayerData(int health, int mana)
    {
        this.health = health;
        this.mana = mana;
    }
}

void Start()
{
    PlayerData player1 = new PlayerData(100, 50);
    PlayerData player2 = player1; // 참조 복사
    player2.health = 200;

    Debug.Log(player1.health); // 출력: 200
    Debug.Log(player2.health); // 출력: 200
}

- 구조체

using UnityEngine;

public struct PlayerData
{
    public int health;
    public int mana;

    public PlayerData(int health, int mana)
    {
        this.health = health;
        this.mana = mana;
    }
}

void Start()
{
    PlayerData player1 = new PlayerData(100, 50);
    PlayerData player2 = player1; // 값 복사
    player2.health = 200;

    Debug.Log(player1.health); // 출력: 100
    Debug.Log(player2.health); // 출력: 200
}

선택 기준

  • 데이터의 크기가 작고 간단한 경우 구조체를 사용한다.
  • 복잡한 동작이나 객체 간 공유가 필요한 경우 클래스를 사용한다.

필자는 보통 Json 데이터와 관련된 경우에만 구조체(Struct), 그 외에는 클래스(Class)를 기본으로 사용한다.