더북(TheBook)

임베디드 필드

. 연산자로 임베디드 필드의 내부 필드에 바로 접근할 수 있다. 하지만 임베디드 필드의 내부 필드와 이름이 같은 필드가 있을 때는 임베디드 필드의 타입을 함께 적어주어야 한다.


type Option struct {
    name  string
    value string
}
 
type Item struct {
    name     string
    price    float64
    quantity int
    Option   // 임베디드 필드
}
 
func main() {
    shoes := Item{"Sports Shoes", 30000, 2, Option{"color", "red"}}
                 
    fmt.Println(shoes)
                 
    // name 필드에 접근
    fmt.Println(shoes.name)
                 
    // 임베디드 필드인 Option 구조체의 내부 필드 value에 접근
    fmt.Println(shoes.value)
                 
    // 임베디드 필드인 Option 구조체의 내부 필드 name에 접근
    // Item 구조체에 이름이 같은 필드가 있으므로 Option 타입을 명시
    fmt.Println(shoes.Option.name)
}

실행 결과

{Sports Shoes 30000 2 {color red}}

Sports Shoes

red

color

Item 구조체 내부에 Option 구조체를 임베디드 필드로 지정했고, main 함수에서 Item을 생성한 후 그 값을 출력했다. 임베디드 필드인 Optionvalue를 출력할 때는 타입 이름을 명시하지 않고 바로 내부 필드의 이름으로 접근했다(shoes.value). 하지만 Optionname을 출력할 때는 Item 구조체에 이름이 같은 필드가 있으므로 타입명 Option을 명시해주었다(shoes.Option.name).

그림 4-1 구조체 임베딩
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.