기본적인 배열 연산을 구현해요.
함수형 언어에서는 length, map, reduce 같은 배열 연산을 아주 흔하게 사용해요.
기존 함수를 사용하지 않고, 일련의 기본적인 배열 연산을 직접 구현해요.
구현할 연산의 정확한 개수와 이름은 기존 이름과의 충돌을 피하기 위해 track마다 달라요. 하지만 일반적으로 구현하게 될 연산은 다음과 같아요:
append (주어진 두 배열에서, 두 번째 배열의 모든 항목을 첫 번째 배열의 끝에 추가해요);concatenate (주어진 여러 배열의 모든 항목을 하나로 평탄화한 배열로 합쳐요);filter (주어진 술어와 배열에서, predicate(item)이 True인 모든 항목의 배열을 반환해요);length (주어진 배열의 전체 항목 개수를 반환해요);map (주어진 함수와 배열에서, 모든 항목에 function(item)을 적용한 결과의 배열을 반환해요);foldl (주어진 함수, 배열, 초기 누적자를 받아, 왼쪽부터 각 항목을 누적자에 접어 넣어요(누적해요));foldr (주어진 함수, 배열, 초기 누적자를 받아, 오른쪽부터 각 항목을 누적자에 접어 넣어요(누적해요));reverse (주어진 배열의 모든 원래 항목을 뒤집힌 순서로 담은 배열을 반환해요).참고로, fold 함수(foldl, foldr)에 인자가 전달되는 순서는 중요해요.
이 연습 문제의 테스트를 통과하려면 확장을 사용해야 해요. 확장은 소스를 직접 제어할 수 없는 기존 클래스에, 그 클래스를 상속받지 않고도 새로운 기능을 추가할 수 있게 해주는 방법이에요. Kotlin에서 확장이 어떻게 구현되는지 더 자세히 알아보려면 공식 문서를 확인해 봐요.
customFoldLeft와 customFoldRight 메서드는 "fold" 함수예요. fold는 함수형 프로그래밍 세계에서는 잘 알려진 개념이지만, 객체 지향 프로그래밍에서는 그만큼 알려져 있지 않아요.
배경 지식이 더 필요하다면 이 fold 페이지를 확인해 봐요.