방프리

21.09.04 Chapter4. LINQ 활용 (Item 39) 본문

C#/Effective C#

21.09.04 Chapter4. LINQ 활용 (Item 39)

방프리 2021. 9. 4. 11:30

Item 39 : function과 action 내에서는 예외가 발생하지 않도록 하라

 

람다 표현식의 단점 중 하나가 디버깅하기기 굉장히 어려운 점이다. 실제 메서드가 있는게 아니기 때문에

정확히 어디서 오류가 발생했는지 알기 쉽지 않기 때문이다. 

하지만 LINQ 특성상 람다 표현식을 자주 사용할 수 밖에 없다. 그러기에 예외 데이터에 대한 처리도

충분히 고려한 코딩을 만들어주어야 한다.

다음의 코드는 아무런 고려를 하지 않은 채 의식의 흐름대로 작성된 코드다.

//모든 직원에게 월급을 5% 인상합니다.
var allEmployees = FinmdAllEmployees();
allEmployees.ForEach(e => e.MonthlySalary *= 1.05M);

하지만 잘못된 데이터 혹은 예외가 발생하였을 때 어떻게 될까?

월급 인상이 적용된 사람들도 있을거고, 적용되지 않은 사람들도 생기게 될 것이다. 

당연히 되돌리기도 쉽지 않을 뿐더러 버그를 양산하는 코드이니 차라리 안쓰니만도 못하다.

다음은 어느정도 예외를 방어한 코드이다.

var total = allEmployyees.Aggregate(0M, 
    (sum, emp) => sum + emp.MonthlySalary);

원본 시퀸스를 수정한 것이 아닌, 복사본을 수정하여 완벽하게 동작하였을 때 원본 시퀸스에 반영하는 것이다.

람다 표현식에서 디버깅하기란 굉장히 어렵고 복잡한 작업이다. 원인도 불분명한 상황이 많이 때문에

반드시 원본 시퀸스를 바로 수정하는 것이 아닌 복사본에 수행 후 정상적인 값을 넣도록 방어적인 코드를 짜야한다.

 

Comments