C#/C# 인터페이스 6

C# 인터페이스 vs 추상 클래스

인터페이스 interface OOP에서 객체들의 공통적인 행동에 대한 명세를 규정하고 이를 상속(구현)하는 클래스는 인터페이스를 구현하도록 한다. public interface INetwork { public void Send(); } INetwork라는 인터페이스는 Send()라는 함수적 기능만 있을 뿐이다. INetwork를 구현하는 구현체는 이제 Send() 함수 기능을 가지는 클래스라고 할 수 있다. public partial class IPv4Network : INetwork { public void Send() { Console.WriteLine($"{nameof(IPv4Network)}"); } } public partial class IPv6Network : INetwork { public..

C# 공변성과 반공변성 Covariance / Contravariance

C#의 인터페이스와 대리자에 적용되는 제너릭 타입의 형변환에 관한 기준이다. Base 기반 클래스와 Derived 파생 클래스가 있다하자. public class Base {} public class Derived : Base {} Covariance 공변성 일반적인 다형성 참조 형식의 캐스팅에도 사용되는 방식으로 파생 타입의 인스턴스를 기반 타입으로 참조할 수 있다. IEnumerable d = new List(); IEnumerable b = d; Contravariance 반공변성 반대로 기반 타입 인스턴스를 파생 타입으로 참조한다. 일반적인 다형성 참조 형식에는 적용되지 않는다. 대리자의 제너릭 타입에만 적용된다. Action b = (target) => { Console.WriteLine(tar..

IComparable/IComparer/IEquatable : 비교와 관련된 인터페이스

IComparable / IComparable 선후 관계 / 대소 비교 등을 위한 인터페이스를 제공한다. 어떤 클래스의 인스턴스로 이루어진 컬렉션의 정렬을 위해 사용된다. public interface IComparable { int CompareTo([AllowNull] T other); } CompareTo : 해당 메서드는 int 형을 반환하는데 다음의 선후 관계를 의미한다. 0보다 작음 : 해당 인스턴스(Caller)가 other 보다 선의 관계를 가지며 정렬 시 other보다 앞에 배치된다. 0 : other와 동등한 관계이다. 0보다 큼 : 해당 인스턴스가 other 보다 후의 관계를 가지며 정렬 시 other보다 뒤에 배치된다. 예제 public class Temperature : IComp..

ICollection : 컬렉션 인터페이스

ICollection 인터페이스 컬렉션을 구성하는 size, enumerators 그리고 동기화 기법을 정의한다. 기본적으로 IEnumerable을 상속한 인터페이스 public interface ICollection : System.Collections.IEnumerable ICollection 인터페이스는 IEnumerable을 확장하였다. IDictionary와 IList는 ICollection을 확장한 특별한 인터페이스이다. IDictionary는 key/value 쌍을 가지는 컬렉션을 구현한 형태이고, IList는 인덱스로 랜덤 접근이 가능한 컬렉션을 구현한다. Queue나 Stack의 경우 Collection을 바로 구현하여 List와 같이 랜덤 접근이 불가능하다. IDictionary 인터페..

IEnumerable / IEnumerator : 순회 가능한 컬렉션과 순회하는 방법

IEnumerable 인터페이스 Enumerator를 노출시키고 non-generic 컬렉션에 대한 순회를 할 수 있다. IEnumerable는 generic 컬렉션에 대한 순회. IEnumerable 인터페이스 정의 // // 요약: // Exposes an enumerator, which supports a simple iteration over a non-generic collection. public interface IEnumerable { // // 요약: // Returns an enumerator that iterates through a collection. // // 반환 값: // An System.Collections.IEnumerator object that can be used ..

IDisposable : 비관리 리소스 해제하기

IDisposable 인터페이스 비관리 리소스를 해제하는 방법을 제공한다. public interface IDisposable C#에서는 GC가 참조 형식의 객체의 메모리를 자동으로 관리하며, 더 이상 참조되지 않아 메모리가 해제될 때 비관리 리소스를 갖고있는 객체가 해당 인터페이스를 통해 직접 해제할 수 있는 메커니즘을 제공한다. 어느 시점에 해당 리소스가 해제될 지 (GC가 언제 릴리즈할지) 정확한 예측을 할 수는 없으며, GC는 관리되지 않는 리소스(윈도우 핸들이나, 파일 핸들, 스트림 등)를 알 길이 없다. GC와 더불어 사용자가 직접 판단하에 해당 객체가 더 이상 필요없다고 판단할 경우 직접 Dispose()를 호출하여 비관리 리소스를 해제할 수 있다. IDisposable.Dispose의 구현..