C#

인터페이스(Interface)

잼잼재미 2023. 11. 9. 21:26

인터페이스란?


 - 클래스가 구현해야 하는 멤버들을 정의하는 것

 

 

인터페이스 특징?


 - 클래스의 일종이 아니며, 클래스에 대한 제약 조건을 명시하는 것
 - 클래스가 인터페이스를 구현할 경우, 모든 인터페이스 멤버를 바로 구현해야 함
 - 다중상속 지원

 - 유연한 설계 가능

 

 

예시


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