Menu
Coddy logo textTech

프로젝트 개요 및 구조

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

challenge icon

챌린지

쉬움

기초적인 구조를 설정하여 도서 관리 시스템 프로젝트를 시작해 봅시다! 이 첫 번째 단계에서는 앞으로의 레슨에서 구축할 모든 기능을 지원할 기본적인 뼈대를 만들 것입니다.

관심사의 명확한 분리를 위해 코드를 세 개의 파일로 나누어 구성합니다:

  • book.go: 도서관의 책을 나타내는 Book 구조체를 정의합니다. 각 책은 ID, Title, Author, 그리고 Available 상태(불리언)를 가져야 합니다. ID, 제목, 저자를 매개변수로 받아 Available이 기본적으로 true로 설정된 새 Book의 포인터를 반환하는 생성자 함수 NewBook을 만드세요. 또한 [ID] Title by Author 형식으로 책 정보를 반환하는 String() 메서드를 추가하세요.
  • user.go: ID, Name, Email 필드를 가진 도서관 회원을 나타내는 User 구조체를 정의합니다. 세 가지 값을 모두 받아 새 User의 포인터를 반환하는 생성자 함수 NewUser를 만드세요. User: Name (Email) 형식을 반환하는 String() 메서드를 추가하세요.
  • main.go: 입력을 읽어 책과 사용자를 생성한 다음, 그 정보를 표시하여 모든 것을 하나로 합칩니다.

    생성할 책의 수를 읽습니다. 각 책에 대해 ID, 제목, 저자를 별도의 줄에서 읽으세요. 그런 다음 사용자의 수를 읽고, 각 사용자에 대해 ID, 이름, 이메일을 별도의 줄에서 읽으세요.

    모든 항목을 생성한 후, 각 책의 문자열 표현을 각각의 줄에 출력하고, 이어서 각 사용자의 문자열 표현을 각각의 줄에 출력하세요.

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

  • 책의 수
  • 각 책에 대해: ID, 제목, 저자 (각각 별도의 줄)
  • 사용자의 수
  • 각 사용자에 대해: ID, 이름, 이메일 (각각 별도의 줄)

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

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

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

[B001] The Go Programming Language by Alan Donovan
[B002] Clean Code by Robert Martin
User: Alice Smith (alice@library.com)

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

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

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

[B100] Design Patterns by Gang of Four
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)

이 기초는 프로젝트 전반에 걸쳐 확장해 나갈 핵심 데이터 모델을 구축합니다. 다음 레슨에서는 이러한 구조체를 개선하고 대출 기능을 추가할 것입니다!

직접 해보기

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

	// TODO: 각 책의 정보(ID, 제목, 저자를 별도의 줄에서)를 읽습니다
	// 그리고 NewBook을 사용하여 Book 객체를 생성합니다
	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)

		// TODO: 새로운 책을 생성하고 슬라이스에 추가합니다
	}

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

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

	// TODO: 각 사용자의 정보(ID, 이름, 이메일을 별도의 줄에서)를 읽습니다
	// 그리고 NewUser를 사용하여 User 객체를 생성합니다
	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: 새로운 사용자를 생성하고 슬라이스에 추가합니다
	}

	// TODO: 각 책의 문자열 표현을 출력합니다

	// TODO: 각 사용자의 문자열 표현을 출력합니다
	fmt.Println("TODO: Print output here")
}

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