반응형 전체 글109 [Effective C#] Item 40 지연 수행과 즉시 수행을 구분하라 명령형 코드(Imperative Code) [즉시 수행] 어떻게 작업을 수행해야 하는지를 단계별로 세분화 하여 기술한다. 필요한 매개변수를 모두 계산한 다음에야 비로소 메서드를 호출한다. 아래의 예시에서는 항상 모든 메서드를 호출하며, 각 메서드의 부수효과는 반드시 한 번씩만 발생한다. 메서드를 호출하고 그 결과를 다른 메서드에 전달한다. var answer = Dostuff(Method1(), Method2(), Method3()); 선언적 코드(Declarative Code) [지연 수행] 해결석이며 무슨 작업을 해야 하는지를 정의한다. 각 메서드의 수행 경로가가 필요한 경우에만 호출된다. 아래의 예시에서는 메서드가 각기 호출될 수 도 있고 아닐 수 도 있으며, 여러번 호출 될 수 도 있다. var .. 2023. 5. 2. [Effective C# Item 39] function과 action 내에서는 예외가 발생하지 않도록 하라 일련의 값을 순차 처리하는 코드에서 중간지점에서 오류가 난다면 예외 발생 지점을 파악하기 어렵다. 특히 시퀀스 내 요소의 값을 직접 수정하는 경우 루틴 수행 이전으로 원복 하기는 매우 어렵다. 메서드가 절대로 예외를 유발하지 않도록 하려면 어떻게 해야할까? 단순하게 생각해 볼 수 있는건 예외가 발생할 상황을 필터링 하는 것이다. allEmployees.FindAll( e => e.Classification == EmployeeType.Active). ForeEach(e => e.MonthlySalary *= 1.05M); 하지만 이는 예상 가능한 오류에 대해서만 처리가 가능하다. 예외가 발생하지 않도록 작성하는 것이 불가능하다면, 원본 시퀀스의 복사본으로 알고리즘을 수행하고 정상 완료되는 경우에 시퀀스를.. 2023. 5. 2. [Effective C# Item 38] 메서드보다 람다 표현식이 낫다. 람다 표현식을 사용하여 코드를 작성하면 동일한 코드를 반복하게 될 때가 있다. // 20년 이상 근속자 var earlyFolks = from e in allEmployees where e.Classification == EmployeeType.Salary where e.YearsOfService >= 20 where e.MonthlySalary < 4000 select e; // 20년 미만 근속자 var newest = from e in allEmployees where e.Classification == EmployeeType.Salary where e.YearsOfService < 20 where e.MonthlySalary < 4000 select e; 두 람다 식에서 중복되는 람다식을 메서드로.. 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. 이전 1 ··· 7 8 9 10 11 12 13 ··· 28 다음 반응형