요약 - 연락처
Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 107개 중 18번째.
챌린지
쉬움이제 사용자 지정 타입, 중첩 구조체, 구조체 태그, zero value를 모두 함께 사용하는 연락처 관리 시스템을 만들어 보겠습니다. 이 장에서 익힌 모든 개념을 활용합니다.
코드를 두 파일로 구성합니다.
contact.go: 의미 있는 사용자 지정 타입과 적절한 JSON 형식을 사용하여 연락처 관리 데이터 모델을 정의합니다.Phone및Email사용자 지정 타입을string을 기반으로 만들어 코드 자체로 의미가 드러나도록 합니다.Street,City,Country필드를 포함하는Address구조체를 정의하고, 각 필드에 적절한 JSON 태그를 지정합니다.Name(string),Phone(사용자가 정의한 Phone 타입),Email(사용자가 정의한 Email 타입),Address(중첩 구조체)를 포함하는Contact구조체를 정의합니다.phone과email이 비어 있을 때 생략되도록 JSON 태그를 사용합니다.
main.go: 입력에서 연락처 정보를 읽고, Contact 인스턴스를 생성한 다음 형식이 지정된 JSON으로 출력합니다. 일부 연락처에는 정보가 누락될 수 있으므로 zero value와omitempty가 이를 자연스럽게 처리하도록 합니다.
다음 입력이 제공됩니다.
- 1번째 줄: 연락처 이름
- 2번째 줄: 전화번호 (비어 있을 수 있음)
- 3번째 줄: 이메일 주소 (비어 있을 수 있음)
- 4번째 줄: Street 주소
- 5번째 줄: City
- 6번째 줄: Country
들여쓰기에 두 개의 공백을 사용하여 json.MarshalIndent를 호출합니다. 결과 JSON 문자열을 출력합니다.
예를 들어 이름이 Alice Smith이고, 전화번호는 없으며, 이메일이 alice@example.com, Street가 123 Main St, City가 Boston, Country가 USA인 연락처가 주어졌다면 출력은 다음과 같습니다.
{
"name": "Alice Smith",
"email": "alice@example.com",
"address": {
"street": "123 Main St",
"city": "Boston",
"country": "USA"
}
}phone 필드가 비어 있었기 때문에 아예 나타나지 않는 것을 확인하세요. 이것이 바로 omitempty 태그가 작동한 결과입니다!
직접 해보기
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// 이름 읽기
scanner.Scan()
name := scanner.Text()
// 전화번호 읽기 (비어 있을 수 있음)
scanner.Scan()
phone := scanner.Text()
// 이메일 읽기 (비어 있을 수 있음)
scanner.Scan()
email := scanner.Text()
// 거리 읽기
scanner.Scan()
street := scanner.Text()
// 도시 읽기
scanner.Scan()
city := scanner.Text()
// 국가 읽기
scanner.Scan()
country := scanner.Text()
// TODO: 입력 값을 사용하여 Contact 인스턴스 생성
// 각각의 필드에 사용자 정의 타입 Phone과 Email 사용
// street, city, country로 중첩된 Address 구조체 생성
// TODO: json.MarshalIndent를 사용하여 contact를 JSON으로 변환
// 접두사로 ""를 사용하고 들여쓰기로 " " (공백 두 개) 사용
// TODO: JSON 문자열 출력
_ = name
_ = phone
_ = email
_ = street
_ = city
_ = country
}
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서직접 연습해 보세요: 온라인 Go 컴파일러