본문 바로가기
반응형

C#/Effective C#35

[Effective C#] Item 29 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다. 메서드를 작성하다 보면 단일의 객체를 반환하기보다 일련의 시퀀스를 반환해야 하는 경우가 더러 있다. 시퀀스를 반환하는 메서드를 작성해야 한다면 컬렉션을 반환하기 보다는 이터레이터를 반환하는 것이 더 좋다. 이터레이터를 반환하면 이를 이용하여 다양한 작업을 좀 더 수월하게 수행할 수 있기 때문이다. cf) 시퀀스(sequence) : 데이터에 순서를 붙여 나열한것 이터레이터 메서드(iterator method) 이터레이터 메서드란 호출자가 요청한 시퀀스를 생성하기 위해 yield return 문을 사용하는 메서드를 말한다. 다음은 알파벳 소문자에 대한 시퀀스를 생성하는 매우 기본적인 이터레이터 메서드의 구현 예를 나타내었다. public static IEnumerator GenerateAlphabet() .. 2022. 11. 7.
[Effective C# Item 28] 확장 메서드를 이용하여 구체화된 제네릭 타입을 개선하라. 프로그램을 개발하다 보면 List나 Dictionary와 같이 제네릭 컬렉션에 타입 매개변수를 지정하여 사용하게 될 것이다. 기존에 사용 중인 컬렉션타입에 영향을주지 않으면서 새로운 기능을 추가하고 싶다면 구체화된 컬렉션 타입에 대해 확장 메서드를작성하면 된다. 예시 : IEnumerable 이번에도 IEnumerable에 이미 구현된예시가 있다. 타입 매개변수로 특정 숫자 타입이 전달 되었을 경우에만 사용할 수 있는 확장 메서드들이 있다. public static class Enumerable { public static int Average(this IEnumerable sequence); public static int Max(this IEnumerable sequence); public stati.. 2022. 10. 28.
[Effective C#] Item27 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라. 확장 메서드를 이용하면 인터페이스에 새로운 동작을 추가할 수 있다. 인터페이스에는 가능한 한 최소한의 기능만을 정의하고, 확장 메서드를 세트로 함게 구현하면 손쉽게 기능을 확장할 수 있다. 특히 API를 추가적으로 정의하지 않고도 새로운 기능을 추가할 수 있다. 예시 : IEnumerable system.Linq.Enumerable 클래스가 이 기법을 활용한 대표적인 예다. System.Enumerable에는 IEnumerable에 정의된 50개 이상의 확장 메서드가 포함되어 있다. Where, OrderBy, GroupInfo 등이 있다. 이처럼 IEnumerable에 대해 확장 메서드를 정의하면 이미 IEnumerable를 구현하고 있는 클래스 수정할 필요가 없다. 이전과 동이하게 GetEnumera.. 2022. 10. 26.
[Effective C#] Item26 제네릭 인터페이스와 논 제네릭 인터페이스를 함께 구현하라 C#의 제네릭을 사용하면 컴파일 타임에 타입을 미리 체크하여 에러를 사전에 잡을 수 있고, 컴파일러가 직접 타입을 캐스팅 해줘서 편하고 다른 타입이지만 동일한 코드를 사용할때, 코드 재사용성을 높여줘서 아주 유용하다. 그렇다면 왜 이렇게 편한 제네릭 인터페이스가 있는데 논제네릭 인터페이스도 같이 구현하라고 하는걸까? 논제네릭 인터페이스를 함께 구현해야 하는 이유 제네릭이 생기기 이전에 개발된 코드들을 무시할 수 있다면 좋겠지만 유감스럽게도 무시하는 것이 어렵다. 새로운 라이브러리를 개발할 대 제네릭 타입뿐 아니라 고전적인 방식도 함께 지원한다면 라이브러리의 활용도를 더 높일 수 있다. 만약 제네릭 타입이 아닌 방식을 지원하겠다고 결정했다면 다음 3가지 요소에 대해서는 논제네릭 방식을 지원해야 한다. 1... 2022. 10. 26.
반응형