본문 바로가기
반응형

C#59

[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.
[Effective C#] Item 36 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라 LINQ는 쿼리 언어와 그 쿼리 언어를 일련의 메서드 집합으로 변환하는 2개의 핵심 구조를 기반으로 한다. C# 컴파일러는 쿼리 언어로 작성된 쿼리 표현식을 메서드 호출 구문으로 변환해준다. C#은 쿼리 표현식 패턴에 포함된 개별 메서드가 어떤 의미를 가지고 있는지 전혀 개의치 않는다. 예로 들어 컴파일러는 Where()과 같은 메서드가 쿼리 표현식의 패턴에서 의도하는 동작을 온전히 수행하는지를 확인하지 않으며, 구문상의 오류만을 확인할 뿐이다. 따라서 유효한 구조의 메서드라 하더라도 그 메서드가 우리가 의도하는 바를 제대로 구현하고 있는지를 컴파일러가 확인할 수 없다. 따라서 우리는 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 제대로 알아둘 필요가 있다. where : Wher() where는 .. 2023. 2. 23.
반응형