인터페이스를 상속받는 클래스는 인터페이스에 정의된 모든 멤버를 구현해야 함!! (일종의 클래스 제약조건처럼 작동)
인터페이스는 여러 클래스에 다중 상속이 가능
/* 아이템 사용 로직에 활용할 인터페이스 */publicinterfaceIUsable
{
voidUse(); // Use 메서드 정의
}
/* 인터페이스 상속 - 아이템 클래스 */publicclassItem : IUsable
{
publicstring Name { get; set; }
publicvoidUse() // 상속받은 Use 메서드 구현
{
Console.WriteLine("아이템 {0}을 사용했습니다.", Name);
}
}
/* 플레이어 클래스 */publicclassPlayer
{
// item 클래스에서 상속받은 인터페이스의 멤버 입력 받기 위해 IUsable 타입 설정// 여기선 Use 메서드 사용하기 위함publicvoidUseItem(IUsable item)
{
item.Use();
}
}
/* 게임 실행 */staticvoidMain()
{
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
}