다양한 인터페이스에 대해 알아보기에 앞서 인터페이스가 무엇인지에 대해 알아보겠습니다.
인터페이스는 특정한 클래스를 만들 때에 사용하는 규약입니다. 쉽게 애기하면 실수하지 않게 도와주는 기능이라 생각하면 됩니다.
이번에는 이미 만들어져있는 인터페이스로 클래스를 구현해보겠습니다.
[IComparable 인터페이스]
Icomparable 인터페이스는 C#에서 기본으로 제공해줍니다. 인터페이스는 모두 대문자 I로 시작합니다.
Icomparable 은 말 그대로 비교할 때에 사용하는 규약입니다
다음 코드를 기반으로 설명을 해보겠습니다.
class Program
{
class Product
{
public string Name { get; set; }
publc int Price { get; set; }
public override string ToString()
{
return Name + " : " + Price + "원";
}
}
static void Main(string[] args)
{
List<Product> list = new List<Product>();
{
new Product() { name = "고구마", Price = 1500 },
new Product() { name = "사과", Price = 2400 },
new Product() { name = "바나나", Price = 1000 },
new Product() { name = "배", Price = 3000 },
};
list.Sort();
foreach(var item in list)
{
Console.WriteLine(item);
}
}
}
이런식으로 코드를 작성하면 예외가 발생합니다.
Sort() 메서드가 Product 클래스를 어떤 기준으로 정렬해야 할지 모르기 때문에 발생하는 오류입니다.
이러한 기준을 정해주기위해 IComparable 인터페이스를 구현해야 합니다.
우선 IComparable 인터페이스 클래스를 상속받아야 하고, IComparable 인터페이스는 CompareTo() 메서드를 구현해야 한다는 규약을 가지고 있습니다. 따라서 CompareTo() 메서드를 구현해주어야 합니다.
아래와 같이 구현하였을 경우 Price 로 정렬하게 됩니다.
class Product : IComparable
{
public string Name { get; set; }
publc int Price { get; set; }
public override string ToString()
{
return Name + " : " + Price + "원";
}
public int CompareTo(object obj)
{
// Product p = (Product)obj;
// return this.Price.CompareTo(p.Price);
return this.Price.CompareTo((obj as Product).Price);
}
}
[IDisposable 인터페이스]
IDisposable 인터페이스는 using 블록을 사용할 때에 자동으로 호출되는 규약입니다.
C# 자체에서 제공하는 인터페이스는 메서드를 호출할 때뿐만 아니라, 키워드를 사용할 때에도 적용됩니다.
class Program
{
// IDisposable 인터페이스 상속
class Dummy : IDisposable
{
// Dispose() 메서드 구현
pubilc void Dispose()
{
Console.WriteLine("Dispose() 메서드를 호출합니다.");
}
}
static void Main(string[] args)
{
using (Dummy dummy = new Dummy())
{
}
}
}
/*
[실행 결과]
Dispose() 메서드를 호출합니다.
*/
'C# > 프로그래밍 고급' 카테고리의 다른 글
C# 프로그래밍 고급 - 06. 델리게이터 (0) | 2024.05.30 |
---|---|
C# 프로그래밍 고급 - 05. 예외 객체 (0) | 2024.05.30 |
C# 프로그래밍 고급 - 04. 예외처리 (1) | 2024.05.29 |
C# 프로그래밍 고급 - 03. 인터페이스 멤버와 다중 상속 (2) | 2024.05.29 |
C# 프로그래밍 고급 - 02. 인터페이스 생성 (0) | 2024.05.29 |