본문 바로가기
반응형

C#59

[Effective C#] Item 30 루프보다 쿼리 구문이 낫다. C#은 다양한 반복 구문을 제공하기 때문에 일상적인 개발에는 전혀 지장이 없다. 하지만 쿼리 구문을 사용하는 것이 반복문을 사용하는 것보다 좋은 경우가 꽤 있다. 쿼리 구문의 장점 1. 프로그램의 논리를 명령형 방식에서 선언적인 방식으로 전환할 수 있다. 2. 질의의 내용을 구성할 수 있을 뿐 아니라 개별 항목에 대해 수행하려는 작업의 수행 시기를 연기할 수 있다. 3. 사용자의 의도를 더 명확하게 드러낼 수 있다. 예시 1) 0부터 99가지의 수에 대해 (X, Y) 좌표 객체를 생성 1-1) 루프 var foo = new int[100]; for (var num = 0; num < foo.Length; numm++) foo[num] = num * num; foreach (int i in foo) e.W.. 2022. 11. 7.
[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.
반응형