이번 편의 목표: 하루 요율을 정하는 함수를 값으로 넘겨, 연체 일수 목록의 합계를 구합니다.
함수도 값입니다. 매개변수의 타입이 func(int) int이면, 그 모양의 함수를 넘길 수 있습니다. 이름 없이 그 자리에 만드는 함수를 함수 리터럴이라고 합니다.
package main
import "fmt"
func totalFee(days []int, rate func(int) int) int {
total := 0
for _, day := range days {
total += rate(day)
}
return total
}
func main() {
days := []int{0, 2, 4}
paper := func(day int) int {
if day <= 0 {
return 0
}
return day * 100
}
fmt.Println(totalFee(days, paper))
}0은 0원이고 2와 4는 200원과 400원입니다. 출력은 600입니다. totalFee는 하루가 100원인지 50원인지 모릅니다. 넘긴 rate가 그 결정을 합니다. 전자책 요율이 필요하면 50을 곱하는 함수를 따로 만들어 같은 totalFee에 넘깁니다.
직접 해 보기
목록을 1, 0, 5로 바꿔 합계가 600인지 확인하세요.
해설
1과 5만 요금이 있습니다. 100과 500의 합은 600입니다. 0을 0원으로 두는 함수는 그대로 둡니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.