본문 바로가기
반응형

C#/Effective C#35

[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#] Item 40 지연 수행과 즉시 수행을 구분하라 명령형 코드(Imperative Code) [즉시 수행] 어떻게 작업을 수행해야 하는지를 단계별로 세분화 하여 기술한다. 필요한 매개변수를 모두 계산한 다음에야 비로소 메서드를 호출한다. 아래의 예시에서는 항상 모든 메서드를 호출하며, 각 메서드의 부수효과는 반드시 한 번씩만 발생한다. 메서드를 호출하고 그 결과를 다른 메서드에 전달한다. var answer = Dostuff(Method1(), Method2(), Method3()); 선언적 코드(Declarative Code) [지연 수행] 해결석이며 무슨 작업을 해야 하는지를 정의한다. 각 메서드의 수행 경로가가 필요한 경우에만 호출된다. 아래의 예시에서는 메서드가 각기 호출될 수 도 있고 아닐 수 도 있으며, 여러번 호출 될 수 도 있다. var .. 2023. 5. 2.
[Effective C# Item 37] 쿼리를 사용할 때는 즉시 평가보다 지연 평가가 낫다 쿼리를 정의한다고 해서 결과 데이터나 시퀀스를 즉각적으로 얻어오는 것이 아니다. 실제로는 쿼리를 정의하는 작업은 수행 시에 어떤 과정으로 작업을 수행할지에 대한 절차만을 정의한 것에 지나지 않는다. ​ 지연 평가(lazy evaluation) : 실제로 쿼리의 결과를 이용하여 순회를 수행할 때 결과가 생성. 즉시 평가(eager evaluation) : 일반 변수를 사용하는 것처럼 즉각적으로 그 값을 얻어오는 것. 지연 평가는 어떻게 동작하는가?​ 아래 코드는 현재 시간을 생성하는 시퀀스를 작성하고 그 시퀀스를 세계 공용 포맷으로 다시 변경하는 코드이다. var sequence1 = Generate(10, () => DateTime.Now); // 오전 8:00 Thread.Sleep(60000); //.. 2023. 5. 2.
[Effective C# Item 34] 함수를 매개변수로 사용하여 결합도를 낮춰라 보통의 경우엔 클래스 내의 메서드를 정의하기 위해서 베이스 클래스나 인터페이스를 정의하고 이렇게 정의된 내용을 기반으로 코딩한다. 하지만 이 외에도 '함수를 매개변수로 취하는 방식'을 활용한다면 기존의 컴포넌트나 라이브러리와 함께 사용해야 하는 코드를 개발할 때 상당히 큰 도움이 된다. 왜 함수를 매개변수로 취하는가? 함수를 매개변수로 취하게 되면 우선 개발자가 더 이상 구항 타입(concreate type)을 작성할 필요가 없다. 오히려 추상화된 정의를 통해 종속성을 다루는 것을 의미한다. 그리고 API를 좀 더 단순하게 만들 수 있다. 실제로 델리게이트를 사용하여 컴포넌트의 계약을 기술하면 클라이언트 측에서 코드를 사용하기가 쉬워진다. 또한 의존성을 낮춰 단위 테스트를 수행하기 쉬워지고 다른 환경에서.. 2023. 1. 10.
반응형