유니티에서 프로그래밍을 하다 보면 클래스(Class)와 구조체(Struct) 중 어떤 것을 사용할지 고민하게 된다.
이 둘은 비슷해 보이지만 중요한 차이점이 있다.
클래스와 구조체의 주요 차이점
- 값 타입 vs 참조 타입
- 구조체는 값 타입이다. 데이터를 직접 복사하여 사용하며, 메모리 스택에 저장된다.
- 클래스는 참조 타입이다. 데이터의 주소를 참조하며, 메모리 힙에 저장된다.
- 상속
- 구조체는 상속을 지원하지 않는다.
- 클래스는 상속이 가능하다.
- 기본 생성자
- 구조체는 기본 생성자를 제공하지 않으며, 매개변수가 없는 생성자를 직접 정의할 수 없다.
- 클래스는 기본 생성자가 자동으로 생성된다.
- 사용 목적
- 구조체는 간단한 데이터 저장이나 계산에 적합하다.
- 클래스는 복잡한 데이터 구조나 객체 지향 프로그래밍에 적합하다.
코드 예시
- 클래스
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)를 기본으로 사용한다.
'Unity > 정보' 카테고리의 다른 글
[Unity 유니티] 소프트코딩(Soft Coding)이란? (0) | 2025.01.07 |
---|---|
[Unity 유니티] 람다식 AddListener for문 안됨 - 클로저 (Closure) 문제 (1) | 2024.10.29 |
[Unity 유니티] 유니티에서 Json으로 데이터 관리하기 - AES 암호화 / 복호화 (3) (0) | 2024.10.29 |
[Unity 유니티] 유니티에서 Json으로 데이터 관리하기 - 불러오기 / 읽기 (2) (0) | 2024.10.29 |
[Unity 유니티] 유니티에서 Json으로 데이터 관리하기 - 저장 (1) (0) | 2024.10.29 |