C#

IComparable 인터페이스 상속을 통한 클래스 정렬

khkg12 2023. 11. 30. 21:46

IComparable란?

IComparable이라는 인터페이스는 정렬에 대한 순서 기능을 제공하는 인터페이스다. 따라서 이 IComparable을 상속받은 클래스는 클라이언트가 원하는 대로 Sort정렬시 정렬되는 순서를 정해줄 수 있다. 예를 들면 몬스터라는 클래스가 어그로수치를 가지고 있을 때 이 어그로 수치를 기준으로 정렬을 시켜줄 수 있다는 것이다. 

 

예시 코드

public class Monster : IComparable<Monster>
{
    public int agroCost;

    public Monster(int agroCost)
    {
        this.agroCost = agroCost;   
    }

    public int CompareTo(Monster other)
    {
        if (agroCost > other.agroCost)
        {
            return -1;
        }
        if (agroCost < other.agroCost)
        {
            return 1;
        }
        return 0;
    }
}

public class Player
{
    int atk;
    int hp;
    Monster target;
    
    public void SetTarget(Monster monster) 
    {
        target = monster;
    }

}

public class TurnManager : MonoBehaviour
{
    // IComparable 사용 예제
    List<Monster> monsters;
    Player player; 
        
    private void Start()
    {
        player = new Player();
        monsters = new List<Monster>();
        monsters.Add(new Monster(13));
        monsters.Add(new Monster(4));
        monsters.Add(new Monster(15));
        monsters.Add(new Monster(86));
        monsters.Add(new Monster(27));
        monsters.Add(new Monster(8));

        monsters.Sort();

        player.SetTarget(monsters[0]); // 어그로 수치를 통한 정렬이 이루어지고, 가장높은 어그로수치를 가진 몬스터를 타겟으로 설정

        foreach(var monster in monsters)
        {
            Debug.Log(monster.agroCost);
        }        
    }    
}