Menu
Coddy logo textTech

복습 - 결제 수단

Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 26번째.

challenge icon

챌린지

중급

인터페이스를 중심으로 결제 수단을 설계하세요.

  • PaymentMethod는 name, fee(amount), pay(amount)(결제가 이루어졌는지를 반환), status()를 요구하며, 금액에 수수료를 더한 기본 total(amount)을 제공합니다.
  • Card(이름 card)는 2%의 수수료를 부과하고(내림하여 반올림), 항상 결제하며 결제 횟수를 계산합니다: card: 2 payment(s).
  • Wallet(balance)(이름 wallet)는 수수료가 없으며 잔액이 총액을 충당할 때만 결제하고, 그 금액을 잔액에서 차감합니다: wallet: 50 left.
  • GiftCard(balance)(이름 gift card)도 수수료가 없지만, 금액이 최대 100인 경우에만, 그리고 잔액이 해당 금액을 충당할 때만 결제합니다: gift card: 40 left.

그런 다음 각 PaymentMethod를 순서대로 시도하여 결제에 성공하는 첫 번째 수단에 대해 paid 100 with wallet (total 100)을 반환하고, 어느 수단도 결제하지 못하면 declined를 반환하는 checkout(amount, methods)를 완성하세요.

제공된 코드는 결제 수단을 card,wallet:150,gift:120으로 읽은 다음, 줄마다 하나의 금액을 읽고 각 checkout의 결과를 출력한 뒤 마지막으로 모든 결제 수단의 status()를 출력합니다.

여러분의 코드는 PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt, Functions.kt에 작성합니다. Main.kt에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.

직접 해보기

fun main() {
    // 제공된 입력/출력 코드: 그대로 유지하세요
    val input = generateSequence(::readLine).toList()
    val methods = input[0].split(",").map { spec ->
        val p = spec.split(":")
        when (p[0]) {
            "card" -> Card()
            "wallet" -> Wallet(p[1].toInt())
            else -> GiftCard(p[1].toInt())
        }
    }
    for (line in input.drop(1)) println(checkout(line.toInt(), methods))
    for (m in methods) println(m.status())
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Kotlin 플레이그라운드