개발 배경

Unity 게임을 개발하거나 C#을 사용하며 기본 Enum의 FlagHasFlag 를 사용할 때마다 Boxing 으로 인해 가비지가 생성되는것을 쉽게 방지하기 위해 개발하게 된 패키지입니다!

작동방식

Source Generator 를 이용하여 컴파일 타임에 코드들 중 [Flag] 를 가진 enum 선언들을 찾아 커스텀 HasFlagNonAlloc 확장 메소드를 자동으로 생성합니다.

기능

거의 제로에 가까운 런타임 오버헤드로 HasFlag 코드를 가독성있게 작성할 수 있게 됩니다!

var currentState = PlayerState.Idle | PlayerState.Walking;  
  
// 기존 HasFlag (Boxing 발생)  
if (currentState.HasFlag(PlayerState.Idle))  
{  
    // ...  
}  
  
// Boxing 을 피하는 HasFlag 체크 구현  
if ((currentState & PlayerState.Idle) == PlayerState.Idle)  
{  
    // ...  
}  
  
// NonAllocFlagGenerator 설치 이후  
if (currentState.HasFlagNonAlloc(PlayerState.Idle))  
{  
    // ...  
}  

처음 만들어보는 제대로 된(?) 오픈소스 프로젝트라 부족한 점이 많지만 용기내어 올려봅니다!
성능에 민감한 코드를 작성하실 때 도움이 되면 좋겠습니다.

피드백은 얼마든지 환영입니다!