# Show GN: C#에서 런타임 오버헤드를 최소화하며 가독성있는 HasFlag 코드 작성하기

> Clean Markdown view of GeekNews topic #19806. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19806](https://news.hada.io/topic?id=19806)
- GeekNews Markdown: [https://news.hada.io/topic/19806.md](https://news.hada.io/topic/19806.md)
- Type: show
- Author: [clash4970](https://news.hada.io/@clash4970)
- Published: 2025-03-17T14:47:54+09:00
- Updated: 2025-03-17T14:47:54+09:00
- Original source: [github.com/KBluePurple](https://github.com/KBluePurple/NonAllocFlagGenerator)
- Points: 2
- Comments: 0

## Topic Body

### 개발 배경  
Unity 게임을 개발하거나 C#을 사용하며 기본 Enum의 FlagHasFlag 를 사용할 때마다 Boxing 으로 인해 가비지가 생성되는것을 쉽게 방지하기 위해 개발하게 된 패키지입니다!  
  
### 작동방식  
Source Generator 를 이용하여 컴파일 타임에 코드들 중 [Flag] 를 가진 enum 선언들을 찾아 커스텀 HasFlagNonAlloc 확장 메소드를 자동으로 생성합니다.  
  
### 기능  
거의 제로에 가까운 런타임 오버헤드로 HasFlag 코드를 가독성있게 작성할 수 있게 됩니다!  
  
```cs  
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))  
{  
    // ...  
}  
```  
  
---  
  
처음 만들어보는 제대로 된(?) 오픈소스 프로젝트라 부족한 점이 많지만 용기내어 올려봅니다!  
성능에 민감한 코드를 작성하실 때 도움이 되면 좋겠습니다.  
  
피드백은 얼마든지 환영입니다!

## Comments



_No public comments on this page._
