본문 바로가기
[ Unity ]/- 유니티 실습

유니티 struct와 class의 차이

by MRG 2024. 9. 2.
728x90
반응형

▣ Struct와 Class의 차이
C#에서 struct와 class는 둘 다 사용자 정의 데이터 타입을 정의하는 데 사용됩니다. 
그러나 메모리 할당 방식, 성능, 사용 사례 등에서 중요한 차이점이 있습니다.

▣ Struct를 사용하는 경우:
작은 크기의 데이터를 다룰 때 (예: 2D 좌표, 색상 데이터)
불변성(Immutable)을 유지해야 하는 경우
값 타입이 필요할 때 (데이터를 복사해서 사용해야 하는 경우)

▣ Class를 사용하는 경우:
복잡한 데이터 구조나 상태를 유지해야 할 때
상속과 다형성(Polymorphism)을 사용해야 할 때
참조에 의한 호출이 필요할 때 (데이터의 크기가 큰 경우)

 

 

 

 

 

 

https://docs.unity3d.com/ScriptReference/MonoBehaviour.html

 

Unity - Scripting API: MonoBehaviour

MonoBehaviour offers life cycle functions that make it easier to develop with Unity. MonoBehaviours always exist as a Component of a GameObject, and can be instantiated with GameObject.AddComponent. Objects that need to exist independently of a GameObject

docs.unity3d.com

 

 

▣ Class 관련 문제 및 정답

- 문제 1:
Unity에서 Player라는 클래스를 만들어 보세요. 이 클래스는 다음의 속성을 가져야 합니다:
이름 (name: string)
체력 (health: int)
공격력 (attackPower: int)
이 클래스에는 다음과 같은 기능이 있어야 합니다:
TakeDamage(int damage)라는 메서드를 만들어, 플레이어의 체력을 주어진 데미지만큼 감소시키세요.

public class Player
{
    // 여기에 코드를 작성하세요.
}


- 정답 1:
public class Player
{
    public string name; // 플레이어 이름
    public int health; // 플레이어 체력
    public int attackPower; // 플레이어 공격력

    // 데미지를 받아 체력을 감소시키는 메서드
    public void TakeDamage(int damage)
    {
        health -= damage;
        if (health < 0)
            health = 0; // 체력이 0보다 작아지지 않도록 처리
    }
}


- 문제 2:
Enemy라는 클래스를 만들어보세요. 이 클래스는 다음과 같은 메서드를 가져야 합니다:
Attack(Player player)라는 메서드를 만들어, 지정된 Player 객체의 체력을 감소시키세요. 공격력은 Enemy 클래스의 필드로 선언된 attackPower 값을 사용하세요.


public class Enemy
{
    // 여기에 코드를 작성하세요.
}


- 정답 2:
public class Enemy
{
    public int attackPower; // 적의 공격력

    // 플레이어를 공격하는 메서드
    public void Attack(Player player)
    {
        player.TakeDamage(attackPower);
    }
}





▣ Struct 관련 문제 및 정답

- 문제 1:
Point2D라는 구조체를 만들어 보세요. 이 구조체는 다음의 속성을 가져야 합니다:
x: int
y: int
또한, 이 구조체에는 좌표를 (dx, dy) 만큼 이동시키는 Move(int dx, int dy)라는 메서드를 작성하세요.

public struct Point2D
{
    // 여기에 코드를 작성하세요.
}


- 정답 1:
public struct Point2D
{
    public int x; // x 좌표
    public int y; // y 좌표

    // 좌표를 이동시키는 메서드
    public void Move(int dx, int dy)
    {
        x += dx;
        y += dy;
    }
}


- 문제 2:
Rectangle이라는 구조체를 만들어 보세요. 이 구조체는 다음의 속성을 가져야 합니다:
width: float
height: float
이 구조체에는 사각형의 면적을 계산하는 Area()라는 메서드를 추가하세요.


public struct Rectangle
{
    // 여기에 코드를 작성하세요.
}


- 정답 2:
public struct Rectangle
{
    public float width; // 사각형의 너비
    public float height; // 사각형의 높이

    // 사각형의 면적을 계산하는 메서드
    public float Area()
    {
        return width * height;
    }
}

728x90
반응형

댓글