유니티 enum 이란?

유니티 enum 이란 C#에서 사용하는 열거형(“enumeration”의 줄임말) 형식을 가리킵니다. 열거형이란 이름이 지정된 상수 집합을 나타내는 값 형식입니다.

열거형은 enum 키워드를 사용하여 정의되며 상수는 쉼표로 구분된 값의  목록으로 지정됩니다. 다음은 enum 의 예제 코드입니다.

public enum Days
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

열거형은 일련의 지정된 상태(state) 또는 값의 집합을 나타내는 데 자주 사용됩니다. 예를 들어 열거형을 사용하여 위의 예에서와 같이 요일을 나타낼 수 있습니다.

유니티 enum 의 이점

enum, 즉 열거형을 사용하면 일반 상수를 사용하는 것보다 몇 가지 이점을 누릴 수 있습니다.

읽기 쉽다

열거형이 더 읽기 쉽습니다. 열거형은 숫자 상수보다 이해하기 쉬운, 지정된 이름을 가진 상수를 사용합니다. 예를 들어 Days.Sunday 라고 하면 우리는 이 값이 일요일을 나타낸다는 것을 직관적으로 알 수 있습니다. 

유지 관리가 쉽다

열거형은 유지 관리가 더 쉽습니다. 열거형에서 상수를 추가, 제거 또는 재정렬해야 하는 경우 상수 값을 변경하지 않고도 수행할 수 있습니다. 이는 상수가 코드의 여러 위치에서 사용되는 경우 특히 유용할 수 있습니다.

안전하다

열거형은 안전합니다(즉, type-safe). 열거형은 미리 지정된 type 이므로 열거형 변수에 실수로라도 잘못된 유형의 값을 할당할 수 없습니다. 따라서 열거형을 사용하면 코드의 오류를 사전에 방지할 수 있습니다.

유니티 enum 사용의 예

다음은 유니티에서 열거형 enum 을 사용하여 코딩한 예입니다.

using UnityEngine;

public class EnumExample : MonoBehaviour
{
    // 3개의 State 값을 열거형으로 지정
    public enum States
    {
        Idle,
        Walking,
        Running
    }

    // enum 타입의 변수를 선언
    public States currentState;

    void Update()
    {
        // switch 구문을 이용하여 열거형 변수를 사용
        switch (currentState)
        {
            case States.Idle:
                // state 가 idle 일 때 콘솔 화면에 상태를 표시
                Debug.Log("Idle");
                break;
            case States.Walking:
                // state 가 walking 일 때 콘솔 화면에 상태를 표시
                Debug.Log("Walking");
                break;
            case States.Running:
                // state 가 running 일 때 콘솔 화면에 상태를 표시
                Debug.Log("Running");
                break;
        }
    }
}

위의 코드를 하나씩 살펴 보도록 하겠습니다.

public enum States
{
    Idle,
    Walking,
    Running
}

여기에서는 Idle, Walking 및 Running의 세 가지 값이 있는 States라는 새 열거형(enum)을 정의하였습니다.

public States currentState;

다음으로 앞에서 정의한 열거형 States 타입의 퍼블릭 변수인 currentState 를 선언하였습니다. 이 currentState 변수에는 앞의 States 열거형에 정의된 세 값(Idle, Walking, Running) 중 하나를 지정할 수 있습니다.

switch (currentState)
{
    case States.Idle:
        Debug.Log("Idle");
        break;
    case States.Walking:
        Debug.Log("Walking");
        break;
    case States.Running:
        Debug.Log("Running");
        break;
}

이 코드 블록은 switch 문을 사용하여 currentState 변수의 값에 따라 다른 코드를 실행합니다. 여기에서는 각각의 상태에 따라 유니티의 콘솔창에 Idle, Walking, Running 이라는 글자를 표시합니다.

열거형이 아닌 상수를 사용한 예제

위의 유니티 예제 코드는 다음과 같은 방식으로도 작성할 수 있습니다. 이 경우에는 열거형이 아닌 일반 상수를 이용하여 똑 같은 동작을 수행하는 코드를 작성한 것입니다.

열거형을 사용한 코드와 비교해서 어떤 점이 다르고 같은지 살펴 보시기 바랍니다.

using UnityEngine;

public class ConstantExample : MonoBehaviour
{
    // 3가지 State 에 대한 3개의 상수 선언
    public const int Idle = 0;
    public const int Walking = 1;
    public const int Running = 2;

    // 현재 State 를 저장할 정수 타입의 변수 선언
    public int currentState;

    void Update()
    {
        // switch 구문을 이용하여 위에서 만든 상수 사용
        switch (currentState)
        {
            case Idle:
                Debug.Log("Idle");
                break;
            case Walking:
                Debug.Log("Walking");
                break;
            case Running:
                Debug.Log("Running");
                break;
        }
    }
}

열거형 enum 을 사용하건, 일반 상수를 사용하건 동일한 작업을 수행하는 코드를 작성할 수 있습니다. 하지만 열거형을 사용하는 것에 장점이 더 많으므로 위와 같은 경우에는 가급적 열거형을 사용하는 것이 좋습니다.

더 공부할 자료

유니티 C# 스크립트 작성에 대해 보다 심도 있는 공부를 원하시면 다음 링크를 체크해 보시기 바랍니다.

유니티 C# 프로그래밍 연습 (ebook)

“막 유니티를 배운 주니어 게임 프로그래머로서 자신의 힘으로 첫번 째 게임을 만들고 싶지만 어디서부터 시작해야 할지 막막한 분 계신가요? 이 책을 읽어 보세요. 간단한 게임이지만 게임 구현 전체 프로세스를 자세한 설명과 함께 제공합니다. 동영상 예제까지 들어 있어요!”

더 공부할 자료 - 개발 능력 다양화를 위한 학습의 필요성

유니티 엔진의 대안으로서, 인디 개발자들에게 선풍적인 인기를 끌고 있는 엔진이 바로 고도 엔진입니다. 혹시 고도 엔진을 배워 보려고 하신다면, 다음의 온라인 강의를 체크해 보시기 바랍니다.

초보자를 위한 고도엔진 게임 개발 입문