방프리

21.09.06 Chapter4. LINQ 활용 (Item 40) 본문

C#/Effective C#

21.09.06 Chapter4. LINQ 활용 (Item 40)

방프리 2021. 9. 14. 21:28

Item 40 : 지연 수행과 즉시 수행을 구분하라

 

이전 37번 항목 (쿼리를 사용할 때는 즉시 평가보다 지연 평가가 낫다)에서 LINQ에서 지연 수행의 필요성을

배웠었다. 이번 항목도 이에 대한 연장선이라고 할 수 있다.

보통 다음의 코드를 본다면 다음과 같이 동작할거라 생각한다.

var answer = DoStuff( () => Method1(),
    () => Method2(),
    () => Method3());
    
// Method1() => Method2() => Method3()

하지만 그렇지 않다. DoStuff()가 수행되면서 필요할 때만 해당 함수를 수행하게 된다. 즉 Method2()가 실행 될 때

이미 Method1()이 실행된 상태가 아니라는 뜻이다.

특히 예제에서는 매개변수가 없지만, 매개변수가 있는 상태에서 동작하는 함수라면 상황은 크게 달라진다.

그렇기에 저자는 다음과 같은 코드를 짤 때 굉장한 주의와 여러 가지 제약이 필요하다고 서술하고 있다.

예로 매개변수가 필요하다면 해당 매개 변수는 변경 불가 타입으로 만들어야 할 것. 

캐싱할 수 있는 데이터는 최대한 캐싱할 것, 위의 방식과 비슷한 코드로 만들어야 한다면 속도, 공간 측에서도 

충분히 고려해야한다고 한다.

Comments