Menu
Coddy logo textTech

요약 - 연락처

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

challenge icon

챌린지

쉬움

이번 장에서 배운 사용자 정의 타입, 중첩 구조체, 구조체 태그, 그리고 제로 값(zero values) 개념을 모두 활용하여 연락처 관리 시스템을 구축해 봅시다.

코드는 다음 두 개의 파일로 구성됩니다:

  • contact.go: 의미 있는 사용자 정의 타입과 적절한 JSON 포맷을 사용하여 연락처 데이터 모델을 정의합니다:
    • 코드의 가독성을 높이기 위해 string을 기반으로 하는 사용자 정의 타입 PhoneEmail을 생성합니다.
    • Street, City, Country 필드를 가진 Address 구조체를 정의하고, 각 필드에 적절한 JSON 태그를 추가합니다.
    • Name (string), Phone (사용자 정의 Phone 타입), Email (사용자 정의 Email 타입), 그리고 Address (중첩 구조체)를 포함하는 Contact 구조체를 정의합니다. phoneemail 필드가 비어 있을 경우 JSON 결과에서 제외되도록 JSON 태그를 사용하세요.
  • main.go: 입력으로부터 연락처 정보를 읽어 Contact 인스턴스를 생성하고, 이를 포맷팅된 JSON으로 출력합니다. 일부 연락처는 정보가 누락될 수 있으며, 이 경우 제로 값과 omitempty가 이를 적절히 처리하도록 합니다.

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

  • Line 1: 연락처 이름
  • Line 2: 전화번호 (비어 있을 수 있음)
  • Line 3: 이메일 주소 (비어 있을 수 있음)
  • Line 4: 도로명 주소
  • Line 5: 도시
  • Line 6: 국가

json.MarshalIndent를 사용하고 들여쓰기는 공백 두 개로 설정하세요. 결과 JSON 문자열을 출력합니다.

예를 들어, 이름이 Alice Smith이고 전화번호는 없으며, 이메일은 alice@example.com, 주소는 123 Main St, 도시 Boston, 국가 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으로 변환
	// 접두사(prefix)로 ""를 사용하고, 들여쓰기(indent)로 "  "(공백 두 개)를 사용하세요

	// TODO: JSON 문자열 출력
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

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