ITEM 32 :: EFFECTIVE C#


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


이번 챕터는 Action, Predicate, Function과 순회 방식을 분리하라, 입니다. 이전부터 보였던 미리 정의된 델리게이트 함수들의 이름이네요. 이 함수들은 람다식과 함께쓰면 좋은데, 이번 챕터에선 어떤 내용일지 보도록 하겠습니다.

설명

이전 챕터에서는 개별 데이터 타입에 대해서 주안을 두기보다는 yield return을 이용하여

시퀀스에 대해 사용 가능 한 이터레이터 메서드를 만드는 방법을 살펴봤다.

이터레이터 메서드의 사용 예를 살피면 크게 2가지 유형이있다.

하나는 시퀀스 내의 개별 항목을 이용하여 작업을 수행하는 유형

다른 하나는 시퀀스의 [순회 방식에 변경을 주는 유형도 있다. 예를들어 특정 조건에 부합하는 항목만을 가져오거나 매N번째 항목만을 건너뛰며 가져오는 메서드의 경우다.

이러한 메소드를 작성하는 것이 어렵지는않으나, 중요한 것은, 시퀀스를 순회 하는 것과, 시퀀스의 개별요소에 대해 작업을 수행하는 것을 구분해야 한다는 것이다. 익명 델리게이트나 람다 표현식을 이용하여 빌딩 블록을 작성해두면 다양한 방법으로 이를 재활용할 수 있다.

  1. 요약하자면, 미리 정의된 델리게이트 함수들인 Action Predicate Function을 자주 이용하자.
  2. 이를 통해서 실제 개별 작업을 해야하는 부분과 순회 방식을 분리할 수 있다.
  3. 또한 델리게이트 함수들을 사용하게 되면 함수 중간에서 커스터마이징을 하기 편하다 (람다 표현식을 이용해서!)
  4. Predicate는 임의의 조건에 따라 필터링을 하는데 사용할 수 있다. 특정 조건에 부합하면 반환하는 bool 형식이기 때문이다.

결론

음…어렵다. 순회방식이라는 부분은 컬렉션을 탐색하는 방식에 대한 것 같고, Predicate는 사용해본 적은 없으나 특정 조건에 대한 bool을 반환하는 델리게이트 인 것 같다. 결국, 그 순회하는 부분과 다른 작업하는 부분의 분리를 통해 그 사이의 결합도를 낮추려는 것 같은데, 음… 어렵다.