ITEM 35 :: EFFECTIVE C#


안녕하세요, 35번째 시간입니다.


이번 챕터는 필요한 시점에 필요한 요소를 생성하라, 입니다. 당연한 말입니다만, 이 말은 LINQ뿐만 아니라 다른 프로그래밍 영역에서도 어느정도 일맥상통하는 부분이 있는 것 같아요. 그러니, 짧게라도 이해하고 가면 좋을 것 같습니다.

설명

  1. 이터레이터 메서드가 입력 매개변수로 반드시 시퀀스를 전달받을 필요는 없다.

  2. 이터레이터 메서드를 구현할 때 통상 새로운 출력 시퀀스를 생성하기 위해서 yield return 을 주로 사용하게 되는데, 이 과정에서 입력 시퀀스를 활용하는 대신 새로운 요소를 생성하는 팩토리 메서드를 사용할 수도 있다. 이는 작업을 수행하기 전에 필요한 요소를 모두 생성해서 컬렉션에 저장해두는 대신 필요할 때마다 개발 요소를 생성하는 식이다. 이 방법으로 코드를 작성하면 사용되지 않을 요소를 미리 생성하는 것을 피할 수있다.

  3. 미리 생성해두면 어떠한 사정에 의해 변환을 수정해야 할 때 버그가 발생할 확률이 줄어든다.

  4. 또한, 클라이언트가 중간에 작업을 중단할 수 없기 때문에, CreateSequence() 메서드는 항상 요청 된 개수만큼 요소를 생성한다. 사용자가 페이징이나 혹은 다른 이유로 작업을 중단하고 싶어도 방법이 없다.

  5. 그리고 이러한 경우에는 시퀀스 내의 요소들을 모두 생성할 때까지 다음 단계를 진행할 수 없기 때문에 파이프라인 병목구간이 된다. 시퀀스를 생성하는 기능을 이터레이터 메서드로 만들면 이 같은 문제들을 모두 피할 수 있다. (시점에 맞춰 필요한 값을 생성하게되면 중간에 순회를 중지할 수도 있어서 개발에 좋고 하나의 요소를 만드는 데 드는 비용이 얼마나 드느냐에따라 소소한 비용절감 혹은 막대한 비용절감을 불러올 수도 있다!)

결론

결국 위에서 보이는 많은 단점들은 어떤 경우에라도 필요한 시점에 맞추어 필요한 요소를 생성하도록 코딩하게 된다면 효과적으로 극복할 수 있다!… 정도?