인터페이스란?
- 클래스가 구현해야 하는 멤버들을 정의하는 것
인터페이스 특징?
- 클래스의 일종이 아니며, 클래스에 대한 제약 조건을 명시하는 것
- 클래스가 인터페이스를 구현할 경우, 모든 인터페이스 멤버를 바로 구현해야 함
- 다중상속 지원
- 유연한 설계 가능
예시
public interface IMovable
{
void Move(int x, int y); // 이동 메서드 선언
}
public class Player : IMovable
{
public void Move(int x, int y)
{
// 플레이어의 이동 구현
}
}
public class Enemy : IMovable
{
public void Move(int x, int y)
{
// 적의 이동 구현
}
}
// 사용
IMovable movableObject1 = new Player();
IMovable movableObject2 = new Enemy();
movableObject1.Move(5, 0); // 플레이어 이동
movableObject2.Move(1, 9); // 적 이동
아이템사용 구현 예제
// 아이템을 사용할 수 있는 인터페이스
public interface IUsable
{
void Use();
}
// 아이템 클래스
public class Item : IUsable
{
public string Name { get; set; }
public void Use()
{
Console.WriteLine("아이템 {0}을 사용했습니다.", Name);
}
}
// 플레이어 클래스
public class Player
{
public void UseItem(IUsable item)
{
item.Use();
}
}
// 게임 실행
static void Main()
{
Player player = new Player();
Item item = new Item { Name = "Health Potion" };
player.UseItem(item);
}
* 가장 유용하게 사용할 수 있는 예제
다중상속 예제
// 인터페이스 1
public interface IItemPickable
{
void PickUp();
}
// 인터페이스 2
public interface IDroppable
{
void Drop();
}
// 아이템 클래스
public class Item : IItemPickable, IDroppable
{
public string Name { get; set; }
public void PickUp()
{
Console.WriteLine("아이템 {0}을 주웠습니다.", Name);
}
public void Drop()
{
Console.WriteLine("아이템 {0}을 버렸습니다.", Name);
}
}
// 플레이어 클래스
public class Player
{
public void InteractWithItem(IItemPickable item)
{
item.PickUp();
}
public void DropItem(IDroppable item)
{
item.Drop();
}
}
// 게임 실행
static void Main()
{
Player player = new Player();
Item item = new Item { Name = "Sword" };
// 아이템 주울 수 있음
player.InteractWithItem(item);
// 아이템 버릴 수 있음
player.DropItem(item);
}
인터페이스와 추상 클래스 비교
1. 인터페이스
- 추상적인 동작만 정의, 구현을 하지 않음
- 다중상속 가능
2. 추상 클래스
- 일부 동작의 구현을 가짐
- 단일상속만 가능
'C#' 카테고리의 다른 글
문자 앞뒤로 특정 문자 입력 (RightPad, LeftPad) (0) | 2023.11.13 |
---|---|
열거형 (Enums) (0) | 2023.11.10 |
out, ref 키워드 (0) | 2023.11.08 |
제너릭 (0) | 2023.11.08 |
오버로딩(overloading)과 오버라이딩(overriding) (0) | 2023.11.08 |