본문 바로가기
반응형

Effective C#21

[Effective C#] Item 22 공변성과 반공변성을 지원하라 공변성(Covariance)과 반공변성(contravariance). 공변 : X를 Y로 바꾸어 사용할 수 있는 경우, C가 C를 C로 바꾸는 거이 가능하다면 공변 반공변 : Y를 X로 바꾸어 사용할 수 있는 경우, C가 C를 C로 바꾸는 것이 가능하다면 반공변이다. 참조 링크 : https://edykim.com/ko/post/what-is-coercion-and-anticommunism/ 공변과 반공변은 프로그래밍에서 특정 타입의 객체를 다른 타입의 객체로 변환할 수 있는 성격을 말하며 이러한 변환을 지원하려면 제네릭 인터페이스나 델리게이트의 정의 부분에 제네릭 공변/반공변을 지원한다는 의미의 데코레이터(decorator)를 추가해야 한다. 배열의 공변은 안전하지 않다 우선 배열의 공변이 안전하지 않.. 2022. 10. 7.
[Effective C#] Item 21 타입 매개변수가 IDisposable을 구현한 경우를 대비하여 제네릭 클래스를 작성하라 제약 조건은 두 가지 역할을 한다. 1. 런타임 오류가 발생할 가능성이 있는 부분을 컴파일타임 오류로 돌릴 수 있다. 2. 타입 매개변수로 사용할 수 있는 타입을 명확히 규정하여 사용자에게도 도움이 된다. 대부분의 경우에 타입 매개변수로 지정하는 타입이 제약 조건을 통해 요규하는 작업 외에 다른 작업을 추가로 할 수있는지에 대해선 신경 쓰지 않는다. 하지만 타입 매개변수로 지정하는 타입이 IDisposable을 구현하고 있다면 특별한 추가 작업이 반드시 필요하다. 제네릭 메서드 내에서 타입 매개변수로 주어지는 타입을 이용하여 인스턴스를 생성할 경우 public interface IEngine { void DoWork(); } public class EngineDriverOne where T : IEngi.. 2022. 10. 5.
[Effective C#] Item 20 IComparable<T>와 IComparer<T>를 이용하여 객체의 선후 관계를 정의하라 컬렉션을 정의하거나 검색하려면 타입 내에 선후 관계를 판단할 수 있는 기능을 정의해야 한다. 이를 위해서 .NET 프레임워크는 객체의 선후 관계를 정의하는 인터페이스인 IComparable와 ICompater를 제공한다. ICOmparable를 이용하여 타입의 기본적인선후 관계를 정의하고 IComparer를 이용하여 기본적인선후 관계 이외에 추가적인 선후 관계를 정의할 수 있다. 이번 항목에서 우리가 배울 것! 1. 객체의 선후 관계를 구현하는 방법 2. 인터페이스를 이용하여 .ENT 프레임워크가 객체의 순서를 정렬하는 원리 그래서 만약 어떤 알고리즘이 특정 타입에 대해 더 효율적으로 동작한다고 생각된다면 그냥 그타입을 이용하도록 적성하는 것도 좋다. 직전 Item 때 처럼 제약 조건을 설정하는 방법도 .. 2022. 10. 4.
[Effective C#] Item19 런타임에 타입을 확인하여 최적의 알고리즘을 사용하라 제네릭을 활용하면 코드를 덜 작성해도 되기 때문에 매우 유용하지만 타입이나 메서드를 제네릭화 하면 구체적인 타입이 주는 장점을 읽고 타입의 세부적인 특징을 고려한 최적화한 알고르즘도 사용할 수 없다. 그래서 만약 어떤 알고리즘이 특정 타입에 대해 더 효울적으로 동작한다고 생각된다면 그냥 그 타입을 이용하도록 작성하는 것도 좋다. 직전 Item 때 러럼 제약 조건을 설정하는 방법도 있지만 제약 조건이 항상 능사는 아니다. 특정 타입의 시퀀스를 역순으로 순회하기 위해서 다음과 같이 클래스를 만들었다. public sealed class ReverseEnumerable : IEnumerable { private class ReverseEnumerator : IEnumerator { int currentInde.. 2022. 10. 4.
반응형