본문 바로가기
반응형

전체 글109

[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.
[C#] 제네릭 형식 제약조건 제네릭(Generic)은 특정 데이터 타입에 국한되지 않고 모든 타입을 허용하는 타입이지만, 특정 조건에만 대응되는 데이터 타입이 필요한 경우 where 키워드를 사용하여 제약 조건을 추가할 수 있으며 제약조건을 만족하지 않는 경우 컴파일에러가 발생하도록 할 수 있다. 모든 타입을 허용하는 제네릭 클래스 class GenericClass { public T member {get; set;} } class Program { static void Main(string[] arg) { GenericClass genericObj1 = new GenericClass(); GenericClass genericObj2 = new GenericClass(); GenericClass genericObj3 = new Ge.. 2022. 9. 30.
반응형