프로젝트 개요 및 구조
Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 107개 중 98번째.
챌린지
쉬움기초적인 구조를 설정하여 도서 관리 시스템 프로젝트를 시작해 봅시다! 이 첫 번째 단계에서는 앞으로의 레슨에서 구축할 모든 기능을 지원할 기본적인 뼈대를 만들 것입니다.
관심사의 명확한 분리를 위해 코드를 세 개의 파일로 나누어 구성합니다:
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")
}
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서