Menu
Coddy logo textTech

Book 및 User 구조체

Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 107개 중 99번째.

challenge icon

챌린지

쉬움

도서 관리 시스템을 위한 핵심 데이터 모델을 구축해 봅시다! 도서와 도서관 회원을 나타내는 기본 구조체(struct)를 만들고, 이를 합리적인 기본값으로 초기화하는 생성자 함수를 작성하게 됩니다.

코드는 다음 세 개의 파일로 구성합니다:

  • book.go: ID, Title, Author, ISBN, 그리고 Available (불리언) 필드를 가진 Book 구조체를 정의하세요. ID, 제목, 저자, ISBN을 매개변수로 받아 새로운 Book에 대한 포인터를 반환하는 NewBook 생성자 함수를 만드세요. 새 도서는 항상 대출 가능(available) 상태로 시작해야 합니다. 도서의 상세 정보를 [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false] 형식으로 반환하는 Info() 메서드를 추가하세요.
  • user.go: ID, Name, Email, 그리고 BorrowedBooks (도서 ID를 저장하는 문자열 슬라이스) 필드를 가진 User 구조체를 정의하세요. ID, 이름, 이메일을 받아 빈 대출 도서 목록을 가진 새로운 User에 대한 포인터를 반환하는 NewUser 생성자를 만드세요. Member: [Name] ([Email]) - Books borrowed: [count] 형식을 반환하는 Info() 메서드를 추가하세요.
  • main.go: 입력으로부터 도서와 사용자를 생성하고 그 정보를 표시하여 모델들을 하나로 결합합니다.

    도서의 수를 읽은 다음, 각 도서에 대해 ID, 제목, 저자, ISBN을 별도의 줄에서 읽으세요. 그 다음, 사용자의 수를 읽고, 각 사용자에 대해 ID, 이름, 이메일을 별도의 줄에서 읽으세요.

    각 도서의 정보를 각각 한 줄씩 출력하고, 이어서 각 사용자의 정보를 각각 한 줄씩 출력하세요.

다음과 같은 입력이 제공됩니다:

  • 도서의 수
  • 각 도서별: ID, 제목, 저자, ISBN (각각 별도의 줄)
  • 사용자의 수
  • 각 사용자별: ID, 이름, 이메일 (각각 별도의 줄)

예를 들어, 다음과 같이 입력되면:

2
B001
The Go Programming Language
Alan Donovan
978-0134190440
B002
Clean Code
Robert Martin
978-0132350884
1
U001
Alice Smith
alice@library.com

출력은 다음과 같아야 합니다:

[B001] "The Go Programming Language" by Alan Donovan (ISBN: 978-0134190440) - Available: true
[B002] "Clean Code" by Robert Martin (ISBN: 978-0132350884) - Available: true
Member: Alice Smith (alice@library.com) - Books borrowed: 0

그리고 다음과 같이 입력되면:

1
B100
Design Patterns
Gang of Four
978-0201633610
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.com

출력은 다음과 같아야 합니다:

[B100] "Design Patterns" by Gang of Four (ISBN: 978-0201633610) - Available: true
Member: Bob Jones (bob@email.com) - Books borrowed: 0
Member: Carol White (carol@email.com) - Books borrowed: 0

생성자가 기본값을 어떻게 처리하는지 확인해 보세요. 도서는 대출 가능 상태로 시작하고 사용자는 대출된 도서가 0권인 상태로 시작합니다. 적절한 초기화를 보장하기 위해 생성자 함수를 사용하는 이 패턴은 신뢰할 수 있는 시스템을 구축하는 데 필수적입니다!

직접 해보기

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// 책의 권수 읽기
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: 책을 저장할 slice 생성

	// 각 책의 상세 정보 읽기
	for i := 0; i < numBooks; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		title, _ := reader.ReadString('\n')
		title = strings.TrimSpace(title)
		author, _ := reader.ReadString('\n')
		author = strings.TrimSpace(author)
		isbn, _ := reader.ReadString('\n')
		isbn = strings.TrimSpace(isbn)

		// TODO: NewBook 생성자를 사용하여 새 책을 생성하고 slice에 추가
	}

	// 사용자 수 읽기
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: 사용자를 저장할 slice 생성

	// 각 사용자의 상세 정보 읽기
	for i := 0; i < numUsers; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		name, _ := reader.ReadString('\n')
		name = strings.TrimSpace(name)
		email, _ := reader.ReadString('\n')
		email = strings.TrimSpace(email)

		// TODO: NewUser 생성자를 사용하여 새 사용자를 생성하고 slice에 추가
	}

	// TODO: Info() 메서드를 사용하여 각 책의 정보 출력

	// TODO: Info() 메서드를 사용하여 각 사용자의 정보 출력

	fmt.Println() // 자리 표시자 - 구현 시 제거
}

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