Learning
When: 1학년 6월 25일
How:
개인 프로젝트를 하면서 제가 짠 코드가 너무 비효율적인 것 같아 GPT에게 코드를 추천해달라고 부탁드렸는데, enum 키워드가 나와 그것에 대해 공부해보기로 하였습니다.
Understanding:
처음에 enum은 그냥 새로운 값 형식이라고 생각하면 됩니다. 이게 무슨 말이냐 하면
public enum SlimeType
{
Normal,
Ice,
Poison
}
static void Main(string[] args)
{
SlimeType slimeType = SlimeType.Normal;
}
이렇게 사용했을 때 SlimeType이라는 값 형식이 하나 만들어지고, 이 값 형식의 변수는 무조건 Normal, Ice, Poison이라는 값만 저장할 수 있습니다. 그리고 이렇게 사용한다면 slimeType에는 실제로는 0이라는 값이 저장되는데, Normal이 가장 처음에 정의되었기 때문에 순서대로 0, 1, 2, 3 순서로 값이 지정되는 enum 형식의 규칙에 따라 Normal은 0, Ice는 1 이런 식으로 값이 저장됩니다.
Console.WriteLine(slimeType);을 하면 Normal이 출력되지만 (int)로 형변환을 해줘서 출력하면 0이 나옵니다.
처음 보면 이것을 어디에 사용해야 할지 갈릴 수 있습니다. 하지만 제가 방금 사용한 코드에서 알 수 있듯, 같은 종류이지만 그중에서 어떤 것인지 알아야 하는 곳에서 사용할 수 있습니다.
// enum 열거형 타입 선언
public enum SlimeType
{
Normal,
Fire,
Ice,
Poison
}
//슬라임 코드
private void GiveDamage(int damage, SlimeType type)
{
player.hp -= damage;
player.GetEffect(type);
}
//플레이어 코드
public void GetEffect(SlimeType type)
{
switch (type)
{
case SlimeType.Normal:
NormalEffect();
break;
case SlimeType.Fire:
FireEffect();
break;
case SlimeType.Ice:
IceEffect();
break;
case SlimeType.Poison:
PoisonEffect();
break;
}
}
이런 식으로 사용할 수 있는데 사실 SlimeType을 int로 바꾸면 열거형 타입을 선언할 필요도 없고 똑같이 쓸 수 있습니다. Normal은 0으로, Fire는 1로... 하지만 당연히 이런 코드에서 int로 슬라임의 타입을 정해서 한다면 헷갈릴 가능성도 엄청나게 높아지고, 읽는 입장에서 1이 무슨 타입인지 알기 위해선 switch문까지 가서 1이 무슨 case인지까지 확인해야 합니다. 애초에 타입이 맞는지도 갈릴 가능성이 높을 것 같습니다.
이런 식으로, 근본적으로는 같지만, 종류가 조금씩 다른 경우에 값에 따라 다른 코드를 실행하려면 이렇게 enum을 선언한 후 switch문을 돌려주면 보기도 좋은 코드가 됩니다.
Result: 근본적으로는 같지만 종류가 조금씩 다른 경우에 값에 따라 다른 코드를 실행하려면 열거형 타입을 선언한 후 switch문을 돌려주면 그 값이 무엇을 뜻하는지 알기 쉽기 때문에 이런 식으로 코드를 짜주면 가독성이 좋아집니다.
'C#' 카테고리의 다른 글
| [C#] bool 타입이 아닌 값을 반환 형식이 bool인 메서드에서 반환하기 (0) | 2025.07.02 |
|---|---|
| [C#] 문자열의 한 문자를 가져오기 (0) | 2025.06.28 |
| [C#] const 키워드 (0) | 2025.06.24 |
| [C#] static 키워드 (0) | 2025.06.22 |
| [C#] 객체 지향 프로그래밍 (0) | 2025.06.21 |