ITEM 44 :: EFFECTIVE C#


안녕하세요, 44번째 시간입니다. 이번 내용은 어쩌다보니 굉장히 짧습니다. ;_;


이번 챕터는 바인딩된 변수는 수정하지 말라, 입니다. 바인딩되어있다는 말에서 이미 수정하면 문제가 발생할 것 같은 느낌은 저만 받나요?

설명

  1. 바인딩된 변수라는 것은 클로저로 캡쳐되어있는 변수와 같은 맥락이다.

  2. C# 컴파일러는 쿼리표현식을 변환할 때 새롭게 추가된 어셈블리를 사용하기는 하나, 새로운 CLR기능에 의존적이지 않다. 따라서, C# 컴파일러는 쿼리 표현식과 람다 표현식을 모두 정적 델리게이트나 인스턴스 델리게이트 혹은 클로저로 변환한다.

  3. 또한 그 변환하는 종류는 람다 본문의 코드가 어떻게 작성되었는가에 따라 매번 다르다. 이 부분이 중요한데, 이러한 컴파일러가 방식을 선택하는 방식에 따라 코드의 동작 식이 미묘하게 차이나기 때문이다.

결론

따라서, 여러 개의 쿼리를 연이어 수행할 때, 바인딩된 변수의 값을 수정하게 되면 지연 수행과 컴파일러의 클로저 구현 특성 때문에, 예상치 않은 문제가 발생할 수 있다. 따라서 클로저에 의해 캡처되어 바인딩 된 변수는 수정하지 않는 것이 좋다.