본문 바로가기
반응형

Effective C#21

[Effective C#] Item 42 IEumerable<T> 데이터 소스와 IQueryable 데이터 소스를 구분하라 IEnumerable와 IQueryable는 거의 동일한 API정의를 가진다. 대부분의 경우 두 인터페이스는 상호 교환이 가능한다. 하지만 사실 이 둘은 동작 방식도 다르고 성능도 크게 차이 난다. //IQueryable var q = from c in dbContext.Customers where c.City = "London" select c; var finalAnswer = from c in q orderby c.Name select c; //IEumerable var q = (from c in dbContext.Customers where c.City == "London" select c).AsEumerable(); var finalAnswer = from c in q orderby c.Name .. 2023. 5. 11.
[Effective C#] Item32 Action, Predicate, Function 과 순회 방식을 분리하라 이터레이터 메서드의 사용 예를 살피다 보면 크게 두 가지 유형이 있다. 1. 시퀀스 내의 개별 항목을 이용하여 작업을 수행하는 유형 2. 시퀀스의 순회 방식에 변경을 주는 유형(예를 들어 특정 조건에 부합하는 항목만을 가져오거나, 매 N번째 항목만을 건너뛰며 가져오는 경우) 어떤 유형의 업무라도 실제로 개별 항목에 대하여 수행해야 하는 작업의 내용과 시퀀스의 순회 방식은 서로 연관이 없으므로 분리하여 처리할 수 있다. 이 두 가지를 한 번에 수행하면 코드 간의 결합도가 높아지고 중복 코드가 발생하게 된다. Action, Predicate, Function 익명 델리게이트를 사용할 대는 function과 action이라는 두 가지 패턴이 있고 function의 특별한 형태인 predicate가 있다. pr.. 2022. 11. 15.
[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 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.
반응형