Menu
Coddy logo textTech

복습 - 매표소

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

challenge icon

챌린지

중급

세 가지 선언 종류로 작은 매표소를 만드세요.

  • Ticket에는 number, show, seat을 받는 private 생성자가 있습니다. companion에는 const val SEATS = 3, private 카운터와 티켓에 1, 2, 3, ... 번호를 부여하는 팩토리 issue(show, seat)가 있습니다. issued는 지금까지 발급된 티켓 수입니다. label()은 #1 Hamlet seat 2를 반환합니다.
  • BoxOffice는 객체입니다. sell(show, seat)은 좌석이 1부터 Ticket.SEATS 범위를 벗어나면 no seat 4를, 해당 공연에서 이미 판매된 좌석이면 seat 2 taken을 반환하고, 그렇지 않으면 티켓을 발급한 뒤 해당 티켓의 레이블을 반환합니다. refund(number)은 판매된 티켓의 좌석을 비우고 refunded #1을 반환하거나, no ticket #9를 반환합니다. report()는 공연을 알파벳순으로 정렬하여 Hamlet 2/3, Cats 1/3을 반환하거나, nothing sold를 반환합니다.

제공된 코드는 sell Hamlet 2, refund 1 또는 report 명령을 읽고, 각 응답을 출력한 다음 마지막으로 발급된 수와 함께 tickets issued: 를 출력합니다. 환불된 티켓 번호는 다시 사용되지 않습니다.

코드는 Ticket.kt와 BoxOffice.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

fun main() {
    // 제공된 입력/출력 코드: 그대로 유지하세요
    val input = generateSequence(::readLine).toList()
    for (cmd in input) {
        val p = cmd.split(" ")
        when (p[0]) {
            "sell" -> println(BoxOffice.sell(p[1], p[2].toInt()))
            "refund" -> println(BoxOffice.refund(p[1].toInt()))
            else -> println(BoxOffice.report())
        }
    }
    println("tickets issued: ${Ticket.issued}")
}

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

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