[유니티] 비트 플래그(Bit Flag)를 사용한 다중 상태 관리 구현하기

2025. 10. 18. 19:39·Unity

 게임을 개발하다 보면 하나의 공격에 여러 속성이 섞이거나, 플레이어가 동시에 여러 버프를 얻는 등 한 객체가 여러 상태를 동시에 지니는 상황이 자주 발생한다. 이때 각 상태를 개별 변수로 관리하면, 상태가 중첩될 때마다 if문으로 일일이 검사해야 하고, 새로운 상태가 추가될 때마다 관련된 조건문과 변수도 함께 늘어나 코드가 복잡해진다. 결국 유지보수가 어려워지고, 시스템이 커질수록 관리 비용이 기하급수적으로 증가하게 된다.

 이때 다중 상태 관리를 효율적으로 도와주는 개념이 바로 비트 플래그(Bit Flag)이다.


비트 플래그(Bit Flag)란?

 

비트 플래그는 하나의 정수형 변수 안에 여러 개의 상태(ON/OFF)를 이진수의 각 비트 단위로 저장하는 방식이다.
즉, 한 비트(0 또는 1)가 하나의 상태를 의미하며, 여러 상태를 하나의 변수에 압축적으로 표현하고 동시에 관리할 수 있다.

 

예를 들어서, 다양한 속성을 지닌 탄환을 발사하는 게임을 구현한다고 가정해보자. 이 탄환은 적에게 둔화/기절/쉴드 파괴/화상 등 다양한 속성들을 중복 적용 시킬 수 있다.

 

먼저, 평범한 구조체로 상태를 관리할 때 어떤 일이 생기는지 알아보자.

public class EnemyStatus : MonoBehaviour
{
    public bool isSlow;
    public bool isStun;
    public bool isShieldBreak;
    public bool isBurn;
}

 

 위 예시는 비트 플래그를 사용하지 않고, 각각의 상태를 bool 변수로 따로 관리하는 가장 기본적인 구조다. 이 방식은 단순해 보이지만, 게임 시스템이 확장될수록 문제가 명확해진다.

 

 예를 들어, 적에게 걸릴 수 있는 상태가 둔화, 기절, 쉴드 파괴, 화상 뿐이라면 괜찮지만, 추후에 상태가 추가될 때마다 새로운 변수를 만들고, 기존 코드 곳곳에 if (새로운 상태) 같은 조건문을 추가해야 한다.

 

 또한 상태가 중첩될 때의 처리가 복잡해진다. 예를 들어, 둔화와 기절이 동시에 걸렸을 때의 특수 효과를 구현하려면 다음과 같은 코드가 필요하다.

 

if (isSlow && isStun)
{
    // 둔화 + 기절 중복 효과 처리
}

 

 이런 조건문이 상태의 조합 수만큼 늘어나게 되고, 결국 상태가 많아질수록 코드의 가독성과 유지보수성이 급격히 떨어지게 된다.

즉, 단순한 bool 기반 구조는 초기에 구현하기는 쉽지만, 상태가 늘어나거나 조합 규칙이 복잡해질수록 관리 비용이 폭발적으로 증가한다.

 이런 이유 때문에 bool 대신 비트 플래그(Bit Flag)를 사용해 “여러 상태를 한 변수로 묶어 관리”하는 방식이 더 효율적이라고 할 수 있다.

 


비트 플래그(Bit Flag)를 사용한 다중 상태 관리 예시

앞서 살펴본 bool 기반 구조는 상태가 늘어날수록 관리가 어려워졌지만, 비트 플래그(Bit Flag)를 사용하면 여러 상태를 하나의 변수로 깔끔하게 묶어 관리할 수 있다.

 아래 예시는 StatusTag 열거형(enum)을 정의하고, 이를 활용해 적의 상태를 간결하게 제어하는 코드이다.

 

[System.Flags]
public enum StatusTag
{
    None        = 0,        // 0000
    Slow        = 1 << 0,   // 0001
    Stun        = 1 << 1,   // 0010
    ShieldBreak = 1 << 2,   // 0100
    Burn        = 1 << 3    // 1000
}

public class EnemyStatus : MonoBehaviour
{
    public StatusTag flags; // 여러 상태를 한 변수에 저장

    void Start()
    {
        // 상태 추가
        flags |= StatusTag.Slow;
        flags |= StatusTag.Burn;

        // 상태 확인
        if ((flags & StatusTag.Burn) != 0)
            Debug.Log("화상 상태 적용 중");
    }
}

 

이처럼 비트 플래그를 사용하면

  • 여러 상태를 한 변수(flags) 로 관리할 수 있고,
  • 비트 연산자(|, &, ~) 를 통해 간단히 상태를 추가·확인·제거할 수 있다.

즉, 코드가 훨씬 간결해지고, 새로운 상태를 추가하더라도 기존 구조를 건드리지 않아도 되기 때문에 확장성과 유지보수성이 크게 향상된다.

'Unity' 카테고리의 다른 글

[유니티] 더 나은 코드를 위해, 코드간의 결합도 낮추기  (0) 2025.12.04
[유니티] 설정창에서 소리 조절 기능 구현하기  (1) 2025.10.26
'Unity' 카테고리의 다른 글
  • [유니티] 더 나은 코드를 위해, 코드간의 결합도 낮추기
  • [유니티] 설정창에서 소리 조절 기능 구현하기
Development & Study
Development & Study
프로젝트 및 개인공부를 하며 얻은 지식들을 정리하고 있습니다!
  • Development & Study
    EJ 개발 블로그
    Development & Study
    GitHub Gmail
  • 전체
    오늘
    어제
    • 분류 전체보기 (21)
      • Unity (3)
      • C# (0)
      • C++ (0)
      • 게임 플레이 후기 (0)
      • GAON 개발 일지 (2)
      • 크래프톤 JUNGLE (11)
      • Frontend (1)
      • Backend (0)
      • 알고리즘 (2)
      • AI (1)
      • Pintos (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

    사운드 매니저
    virtual dom
    epoll_wait
    dp 알고리즘
    크래프톤 정글
    크래프톤
    DP
    Diff 알고리즘
    VDOM
    React
    외판원 순회
    비트 플래그
    유니티 소리 조절
    AudioMixer
    유니티
    게임 개발일지
    게임 개발 일지
    Jungle
    하네스 엔지니어링
    Mini-Redis
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Development & Study
[유니티] 비트 플래그(Bit Flag)를 사용한 다중 상태 관리 구현하기
상단으로

티스토리툴바