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);
}
}
}