[go] 구조체(struct)의 익명 필드(anonymous field) 사용법

구조체는 Go 언어에서 데이터를 구조화하여 관리하는 데 사용되는 중요한 개념입니다. Go 언어에서 구조체는 여러 필드를 포함하고, 필드는 각각 이름과 타입을 가지게 됩니다.

구조체에서 익명 필드를 사용하는 것은 필드의 이름을 생략하고 타입만 정의하는 방식입니다. 익명 필드는 구조체에 속한 필드이지만 이름이 없기 때문에 구조체 타입이 익명 필드의 타입으로 사용됩니다. 이를 통해 간단한 상속과 유사한 효과를 얻을 수 있습니다.

익명 필드의 사용법을 자세히 알아보겠습니다.

기본 구문

익명 필드를 사용하기 위해서는 구조체 정의 시 필드 이름을 생략하고 타입만을 명시합니다. 예를 들어, 다음과 같이 구조체를 정의할 수 있습니다.

type Car struct {
    string
    int
}

위의 예제에서는 Car 구조체 내에 string 타입과 int 타입의 익명 필드를 정의하고 있습니다.

익명 필드의 사용

익명 필드를 사용하면 해당 필드의 타입 이름을 생략하고 구조체에서 바로 접근할 수 있습니다. 아래의 예제를 통해 익명 필드의 사용법을 살펴보겠습니다.

package main

import "fmt"

type Car struct {
    string
    int
}

func main() {
    car := Car{"Tesla", 2021}
    fmt.Println(car.string) // "Tesla" 출력
    fmt.Println(car.int)    // 2021 출력
}

위 예제에서는 구조체 Car를 정의하고, car 변수를 생성하여 필드 값을 초기화한 뒤 출력하고 있습니다. 익명 필드의 타입 이름을 생략하고 구조체 필드에 바로 접근하여 값을 출력할 수 있습니다.

임베딩(Embedding)

익명 필드를 사용하면 구조체 타입을 다른 구조체에 임베딩(embedding)할 수 있습니다. 임베딩을 통해 기존 구조체의 필드와 메서드를 내부 구조체에서 직접 사용할 수 있습니다.

다음은 익명 필드를 사용한 임베딩의 예시입니다.

package main

import "fmt"

type Car struct {
    string
    int
}

type SuperCar struct {
    Car
    HorsePower int
}

func main() {
    sup := SuperCar{Car{"Tesla", 2021}, 1000}
    fmt.Println(sup.string)    // "Tesla" 출력
    fmt.Println(sup.int)       // 2021 출력
    fmt.Println(sup.HorsePower) // 1000 출력
}

위의 예제에서는 SuperCar 구조체 내에 Car 구조체를 익명 필드로 포함시켰습니다. 이제 SuperCar 구조체는 Car의 필드를 내부에서 직접 사용할 수 있습니다. 임베딩된 구조체의 필드에 접근하려면 단순히 필드명만으로도 접근할 수 있습니다.

결론

Go 언어에서 익명 필드는 구조체의 필드 이름을 생략하고 타입만을 명시하는 방식입니다. 이를 통해 간단한 상속과 유사한 효과를 얻을 수 있고, 구조체 타입을 다른 구조체에 임베딩하여 필드와 메서드를 직접 사용할 수 있습니다. 익명 필드를 적절하게 활용하여 코드의 가독성과 재사용성을 높일 수 있습니다.


참고 자료: