Menu
Coddy logo textTech

도서와 회원

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

이 프로젝트에서는 도서관 시스템의 핵심을 구축합니다. Library 클래스는 한 줄에 하나씩 명령을 받아 각각에 응답합니다. 다섯 단계에 걸쳐 책과 회원을 추가하고, 책을 대출하고 반납하며, 도서 목록을 검색하고 보고서를 출력하는 방법을 학습합니다:

ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORT

데이터 모델은 이 섹션에서 배운 내용을 사용합니다. Book과 Member는 각각 자신의 파일에 있습니다. 책의 borrower는 어디서나 읽을 수 있지만 lendTo와 giveBack을 통해서만 변경되며, 멤버는 대출 항목의 id를 읽기 전용 List로 노출합니다. 도서관은 둘 다 private 맵에 보관하므로 자체 메서드만 이를 변경할 수 있습니다:

class Book(val id: Int, val title: String) {
    var borrower: String? = null
        private set
    val isAvailable: Boolean
        get() = borrower == null
    fun lendTo(name: String) { borrower = name }
}

main 내부:

val books = mutableMapOf<Int, Book>()
books[1] = Book(1, "Dune")
books.getValue(1).lendTo("ada")
println("${books.getValue(1).isAvailable} ${books.getValue(1).borrower}")

출력:

false ada

handle(line)은 명령을 분할하고 첫 번째 단어에 when을 사용합니다. 모든 분기는 응답을 List<String>으로 반환하므로 REPORT과 같은 명령은 여러 줄로 응답할 수 있으며, 이른 return은 거부 응답을 반환합니다. 책 제목에는 공백이 포함될 수 있으므로 id 뒤의 모든 내용이 제목입니다:

main 내부:

val p = "ADD_BOOK 7 The Hobbit".split(" ")
val id = p[1].toInt()
val title = p.drop(2).joinToString(" ")
println("$id: $title")

출력:

7: The Hobbit
challenge icon

챌린지

쉬움

처음 두 명령을 처리하도록 Library.handle(line)을 완성하세요:

  • ADD_BOOK <id> <title>: 새 대출 가능한 도서를 저장하고 added book 1: Dune으로 응답하세요. id가 이미 사용 중이면 book 1 exists로 응답하세요.
  • JOIN <name>: 회원을 추가하고 welcome ada로 응답하세요. 이름이 이미 존재하면 ada is already a member로 응답하세요.

제공된 코드는 모든 입력 줄을 library.handle(line)에 전달하고, 반환된 각 응답을 한 줄씩 출력합니다. 회원 이름은 소문자로 된 단일 단어이고, 도서 id는 정수이며, 입력에는 지금까지 설명한 명령만 포함됩니다. 그 외의 명령에는 unknown command로 응답합니다.

코드는 Book.kt, Member.kt 및 Library.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.

직접 해보기

fun main() {
    // 제공된 입력/출력 코드: 있는 그대로 유지하세요
    val input = generateSequence(::readLine).toList()
    val library = Library()
    for (line in input) {
        for (reply in library.handle(line)) println(reply)
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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

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