본문 바로가기
C# 공부

C# 기본기 05 - 인터페이스와 열거형(Enums)

by 나노다 2025. 2. 10.

인터페이스 Interface

  • 클래스가 구현해야 할 멤버들을 정의해줌 (딱 선언까지만 해줌)
  • 인터페이스를 상속받는 클래스는 인터페이스에 정의된 모든 멤버를 구현해야 함!! (일종의 클래스 제약조건처럼 작동)
  • 인터페이스는 여러 클래스에 다중 상속이 가능
/* 아이템 사용 로직에 활용할 인터페이스 */
public interface IUsable
{
    void Use(); // Use 메서드 정의
}

/* 인터페이스 상속 - 아이템 클래스 */
public class Item : IUsable
{
    public string Name { get; set; }
	
    public void Use() // 상속받은 Use 메서드 구현
    {
        Console.WriteLine("아이템 {0}을 사용했습니다.", Name);
    }
}

/* 플레이어 클래스 */
public class Player
{
    // item 클래스에서 상속받은 인터페이스의 멤버 입력 받기 위해 IUsable 타입 설정
    // 여기선 Use 메서드 사용하기 위함
    public void UseItem(IUsable item)
    {
        item.Use();
    }
}

/* 게임 실행 */
static void Main()
{
    Player player = new Player();
    Item item = new Item { Name = "Health Potion" };
    player.UseItem(item);
}

열거형 Enums

  • 연관된 상수들을 그룹화해 활용!! 그룹에 이름을 붙여 상수들 관리도 용이해짐
  • 각 상수들에 정수 값들이 매칭되기 때문에, switch문과 호환성이 뛰어남
enum MyEnum
{
    Value1, // 명시적으로 지정하지 않은 경우 시작 값은 0
    Value2, // 값은 자동 증가하기 때문에 1
    Value3 // 값은 자동 증가하기 때문에 2
}

MyEnum myEnum = MyEnum.Value1; // myEnum에 할당되는 값은 0
  • 열거형 상수들에 값을 명시적으로 지정해줄 수 있음!!
  • 지정하지 않은 상수라면 이전 상수에 정수 1만큼 증가한 값을 가짐!
enum MyEnum
{
    Value1 = 10, // 명시적으로 지정했으므로 시작 값은 10
    Value2, // 따로 지정하지 않았기 때문에 자동 증가한 11
    Value3 = 20 // 지정했으므로 값은 20
}
  • 정수형과 모양은 같아 보여도, 열거형에서 매칭된 정수들은 enum 타입이므로 사용에 주의할 것!!
int intValue = (int)MyEnum.Value1;  // enum 타입 10 -> int 타입 10 으로 변환
MyEnum enumValue = (MyEnum)intValue;  // int 타입 10 -> enum 타입 10 으로 변환

게임에서 활용하는 예시들

// 게임 상태
enum GameState
{
    MainMenu,
    Playing,
    Paused,
    GameOver
}

// 방향
enum Direction
{
    Up,
    Down,
    Left,
    Right
}

// 아이템 등급
enum ItemRarity
{
    Common,
    Uncommon,
    Rare,
    Epic
}