BitSupport 라이브러리 자동생성기 & 확장기능 개발

오늘 오전에 BitSupport의 첫 번째 초안을 배포했습니다.

BitSupport NuGet 배포 글

배포 후 "BitSupport만의 차별점은 무엇일까?"라는 고민을 해보았는데, 그 과정에서 한 가지 흥미로운 아이디어가 떠올랐습니다.


아이디어

만약 장비나 캐릭터의 상태를 Bit로 표현하고, 여기에 더해 해당 상태를 제어할 수 있는 자동화 메서드를 클래스로 생성할 수 있다면 어떨까요? 말로 설명하는 것보다는 직접 샘플을 보여드리겠습니다.

사용 예시

// Enum과 자동화할 객체 모델을 아래와 같이 선언합니다.

[BitSupportFlags] // 또는 [Flags]
public enum CharacterState
{
    Idle,
    Running,
    Jumping,
    Attacking,
    Defending
}

[BitState(typeof(CharacterState))] // 또는 [BitState(typeof(CharacterState))]
public partial class Character
{
}
public void Main()
{
    Character character = new Character();

    // 상태 제어
    character.SetState(CharacterStateFlags.Running);  // 캐릭터를 Running 상태로 설정
    character.SetState(CharacterStateFlags.Jumping);  // 캐릭터를 Jumping 상태로 설정
    character.RemoveState(CharacterStateFlags.Jumping); // 캐릭터의 Jumping 상태 제거

    // 상태 확인
    Console.WriteLine($"캐릭터가 점프 중인가요? : {character.IsState(CharacterState.Jumping)}");
    Console.WriteLine($"캐릭터가 달리는 중인가요? : {character.IsState(CharacterState.Running)}");
    Console.WriteLine($"현재 캐릭터의 상태를 Byte로 표현하면? : {character.GetByte()}");

    /*
    [BitState(typeof(CharacterState))]로 설정한 경우에도 동일하게 동작합니다.
    */
}

/* 출력 결과:
  캐릭터가 점프 중인가요? : false
  캐릭터가 달리는 중인가요? : true
  현재 캐릭터의 상태를 Byte로 표현하면? : 0x01
*/

[BitState] 어트리뷰트

[BitState] 어트리뷰트는 [BitSupportFlags][Flags]가 적용된 Enum에 전용으로 사용됩니다. 이를 통해 상태를 간편하게 관리할 수 있으며, 특정 상태의 추가, 제거, 확인 등을 자동으로 처리하는 메서드를 생성합니다.


이 아이디어를 통해 개발자가 Enum 값을 직접 다루는 복잡함을 줄이고, 객체 상태를 보다 직관적으로 관리할 수 있게 됩니다. 다른 의견이나 아이디어가 있다면 언제든지 공유해주세요! :blush:

GitHub 주소

5 Likes

BitState 기능이 포함 된 버전(v1.2.0)을 출시하였습니다.

문제

1.2 버전까지 배포하면서 몰랐던 사실이 있었습니다.
소스 제네레이터가 제대로 동작되지 않았다는 사실… (v1.0부터)
로컬에서 잘 되었기에 소스 생성이 알아서 되겠거니 하고 있었는데

이번 BitState 테스트 해보려고 Nuget 다운받아 테스트해보았지만 제대로 동작되 지 않았습니다.

이유

<None Include="$(OutputPath)$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" />

.csproj에 해당 구문 누락으로 인한 문제였습니다.

이 설정은 다음을 의미합니다:

1. 빌드된 .dll 파일($(OutputPath)$(AssemblyName).dll)을 패키징 대상으로 지정합니다.
2. 이 파일을 NuGet 패키지의 analyzers/dotnet/cs 경로에 포함시킵니다.
3. NuGet 패키지가 생성되면, Source Generator는 올바른 위치에 배치되어, 이를 사용하는 프로젝트에서 자동으로 활성화됩니다.
2 Likes