Menu
Coddy logo textTech

임베디드 구조체

Coddy GO 여정의 기초 섹션에 포함된 레슨 — 109개 중 99번째.

Go는 하나의 구조체(struct)를 다른 구조체 내부에 임베드하여 구성(composition) 관계를 만들 수 있게 해줍니다. 이것이 상속에 대한 Go의 접근 방식입니다.

하나가 다른 하나에 포함된 두 개의 구조체를 정의합니다:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // 임베디드 구조체 (필드 이름 없음)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // 필드에 직접 접근
    fmt.Println(person.city)  // 임베디드 필드에 접근
}

출력 결과는 임베디드 구조체의 필드에 직접 접근할 수 있음을 보여줍니다:

Portland
challenge icon

챌린지

초급

이 챌린지에서는 Go에서 임베디드 구조체(컴포지션)를 사용하는 연습을 합니다.

두 개의 구조체 AddressPerson이 있습니다. Person 구조체는 Address 구조체를 임베드하여 사용자가 주소 필드에 직접 접근할 수 있도록 해야 합니다.

여러분의 과제는 Address 구조체를 임베드하도록 Person 구조체 정의를 완성하고, person 인스턴스에서 주소 필드에 직접 접근하는 것입니다.

직접 해보기

package main

import "fmt"

// Address 구조체는 위치 정보를 포함합니다
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// Person 구조체는 Address 구조체를 임베딩해야 합니다
type Person struct {
	Name string
	Age  int
	// TODO: 여기에 Address 구조체를 임베딩하세요 (한 줄만 작성)
}

func main() {
	// 주소 정보를 포함한 새로운 person을 생성합니다
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// 주소를 포함한 person 정보를 출력합니다
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// TODO: person 인스턴스에서 직접 주소 필드들을 출력하세요
	// (person.Address.Street 등을 사용하지 않고)
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨