더북(TheBook)

reduce 함수는 빈 리스트에서는 작동하지 않는다. 정수 리스트에서 합계를 구하려면 계산을 시작할 원소가 있어야 한다. 리스트가 비어 있다면 어떤 값을 반환해야 할까? 여러분은 결과가 0이라는 사실을 이미 알고 있지만, 이는 합계를 구하는 경우에만 옳다. 곱을 구해야 하는 경우에는 0으로 하면 안 된다.

다른 예로 groupByCard 함수를 생각해 보자. 이 함수는 신용 카드 지급을 카드별 그룹으로 묶을 때만 쓸 수 있는 함수처럼 보인다. 하지만 그렇지 않다! 이 함수를 사용하면 리스트의 종류와 관계없이 원소의 특성에 따라 그룹을 만들 수 있다. 따라서 이 함수를 더 추상화해서 List 클래스에 넣으면 더 쉽게 재사용할 수 있다(코틀린 List 클래스에 이런 함수가 이미 들어 있다).

끝까지 추상화하면 프로그램을 더 안전하게 만들 수 있다. 추상화된 부분을 단 한 번만 작성하면 되기 때문이다. 그 결과, 추상화된 부분을 완전히 테스트하기만 하면 이미 추상화된 부분을 다시 구현하면서 생기는 버그를 막을 수 있다.

이 책의 나머지 부분에서는 프로그램의 여러 요소를 추상화해 단 한 번만 정의하면 되는 방법을 알아본다. 예를 들어 루프를 추상화하는 방법을 알아보는데, 그에 따라 루프를 다시 작성할 필요가 없어진다. 그리고 List 클래스에 있는 함수를 선택해 순차 처리를 병렬 처리로 바꾸는 방식으로 병렬화를 추상화하는 방법도 배운다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.