더북(TheBook)

이 시나리오에서 여러 도넛을 한 번에 사는 경우에는 combine 함수가 효율적이지 않다. 이를 위해서는 다음 예제처럼 buyDonut 함수를 buyDonuts(n: Int, creditCard: CreditCard)로 바꿀 수도 있다. 하지만 그렇게 하려면 새로운 Purchase 클래스를 정의해야 한다. 다른 방법으로 여러분이 Pair<Donut, Payment>를 사용하기로 택했다면 그 타입을 Pair<List<Donut>, Payment>으로 바꿔야만 한다.

예제 1-4 여러 도넛을 한꺼번에 사기

// class Purchase(val donuts: List<Donut>, val payment: Payment)로
// Purchase 정의를 변경했음
fun buyDonuts(quantity: Int = 1, creditCard: CreditCard): Purchase =
        Purchase(List(quantity) {
            Donut()
        }, Payment(creditCard, Donut.price * quantity))

여기서 List(quantity) { Donut() }{Donut() }이라는 함수에 0부터 quantity - 1까지 값을 적용하면서 quantity 길이의 리스트를 만든다. { Donut() }이라는 함수는 다음과 같고,

{ index -> Donut() }

이는 또한 다음과 같다.

{ _ -> Donut() }
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.