Menu
Coddy logo textTech

Book 및 User 구조체

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

challenge icon

챌린지

쉬움

Library Management System의 핵심 데이터 모델을 만들어 봅시다! 책과 library 회원을 나타내는 기반 struct를 만들고, 합리적인 기본값으로 초기화하는 constructor function도 함께 작성합니다.

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

  • book.go: ID, Title, Author, ISBN, Available(boolean) 필드를 포함하는 Book struct를 Define합니다. ID, title, author, ISBN을 parameters로 받아 새로운 Book에 대한 pointer를 반환하는 NewBook constructor function을 Create합니다. 새로운 책은 항상 available 상태로 시작해야 합니다. 책의 details를 다음 Format으로 반환하는 Info() method를 Add합니다: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: ID, Name, Email, BorrowedBooks(book IDs를 저장하는 string slice) 필드를 포함하는 User struct를 Define합니다. ID, name, email을 받아 빈 borrowed books 목록을 가진 새로운 User에 대한 pointer를 반환하는 NewUser constructor를 Create합니다. 다음을 반환하는 Info() method를 Add합니다: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: input으로부터 books와 users를 Create한 다음 해당 information을 표시하여 모델을 함께 사용합니다.

    book의 number를 읽은 다음, 각 book에 대해 ID, title, author, ISBN을 각각 별도의 줄에서 읽습니다. 다음으로 user의 number를 읽고, 각 user에 대해 ID, name, email을 각각 별도의 줄에서 읽습니다.

    각 book의 info를 한 줄에 하나씩 Print한 다음, 각 user의 info를 한 줄에 하나씩 Print합니다.

다음 input이 제공됩니다:

  • book의 number
  • 각 book에 대해: ID, title, author, ISBN(각각 별도의 줄)
  • user의 number
  • 각 user에 대해: ID, name, email(각각 별도의 줄)

예를 들어, 다음이 주어졌을 때:

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

constructor가 기본값을 어떻게 처리하는지 확인하세요. 책은 available 상태로 시작하고, user는 빌린 책이 0개인 상태로 시작합니다. 적절한 초기화를 보장하기 위해 constructor function을 사용하는 이 패턴은 신뢰할 수 있는 시스템을 구축하는 데 기본이 됩니다!

직접 해보기

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: 책을 저장할 슬라이스 생성

	// 각 책의 상세 정보 읽기
	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 생성자를 사용해 새 책을 만들고 슬라이스에 추가
	}

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

	// TODO: 사용자를 저장할 슬라이스 생성

	// 각 사용자의 상세 정보 읽기
	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 생성자를 사용해 새 사용자를 만들고 슬라이스에 추가
	}

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

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

	fmt.Println() // 플레이스홀더 - 구현 시 제거
}

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

직접 연습해 보세요: 온라인 Go 컴파일러