Menu
Coddy logo textTech

요약 - 연락처

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

challenge icon

챌린지

쉬움

이제 사용자 지정 타입, 중첩 구조체, 구조체 태그, zero value를 모두 함께 사용하는 연락처 관리 시스템을 만들어 보겠습니다. 이 장에서 익힌 모든 개념을 활용합니다.

코드를 두 파일로 구성합니다.

  • contact.go: 의미 있는 사용자 지정 타입과 적절한 JSON 형식을 사용하여 연락처 관리 데이터 모델을 정의합니다.
    • PhoneEmail 사용자 지정 타입을 string을 기반으로 만들어 코드 자체로 의미가 드러나도록 합니다.
    • Street, City, Country 필드를 포함하는 Address 구조체를 정의하고, 각 필드에 적절한 JSON 태그를 지정합니다.
    • Name(string), Phone(사용자가 정의한 Phone 타입), Email(사용자가 정의한 Email 타입), Address(중첩 구조체)를 포함하는 Contact 구조체를 정의합니다. phoneemail이 비어 있을 때 생략되도록 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
}

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

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