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
}