티스토리 뷰

 

이터레이터 메서드의 사용 예를 살피다 보면 크게 두 가지 유형이 있다. 시퀀스 내의 개별 항목을 이용하여 작업을 수행하는 유형 외에도, 시퀀스의 순회 방식에 변경을 주는 유형이 있다.

(예를 들어 특정 조건에 부합하는 항목만을 가져오거나, 매 N번째 항목만을 건너뛰며 가져오는 경우)

이처럼 순회 방식에 변경을 주는 유형은 어떤 유형의 업무라도 실제로 개별 항목에 대하여 수행해야 하는 작업의 내용과 시퀀스의 순회 방식은 서로 연관이 없으므로 분리하여 처리할 수 있다.

이 두 가지를 한 번에 수행하면 코드 간의 결합도가 높아지고 중복 코드가 발생하게 된다.


Action, Predicate, Function

익명 델리게이트를 사용할 때는 function과 action이라는 두 가지 패턴이 있고 function의 특별한 형태인 predicate가 있다.

predicate는 시퀀스 내의 항목이 조건에 부합하는지를 boolean으로 반환하는 function이다.

action 델리게이트는 컬렉션 내의 개별 요소에 대하여 실제 수행할 작업을 전달하기 위해 주로 사용된다.

예시 1) predicate의 사용 예 : List<T>.RemoveAll()

myInts.RemoveAll(collectionMember => collectionMember == 5);

내부적으로 List<T>.RemoveAll()은 리스트 내의 각각의 요소를 델리게이트 메서드의 인자로 전달한다. 델리게이트가 true를 반환하면 해당 요소는 리스트에서 제거된다.

예시 2) action의 사용 예 : List<T>.ForEach()

action 메서드는 컬렉션의 모든 요소에 대하여 개별적으로 호출된다.

myInts.ForEach(collectionMember => WriteLine(collectionMember));

컬렉션 내의 모든 멤버를 콘솔에 출력하는 예다.

결론

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

predicate를 포함한 function을 이용하면 시퀀스의 개별 요소에 대해 적용할 다양한 작업을 구현할 수 있다. action을 이용하면 시퀀스의 일부 요소를 가져와서 수행할 작업을 손쉽게 구현할 수 있다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함