[go] 구조체(struct)의 임베딩(Embedding) 개념과 사용 방법

구조체(struct)는 Go 언어에서 여러 개의 필드(field)를 하나의 논리적인 단위로 묶을 때 사용됩니다. 하지만 때로는 한 구조체를 다른 구조체의 일부로 사용해야 할 때가 있습니다. 이때 구조체의 임베딩(Embedding)을 사용할 수 있습니다.

임베딩(Embedding) 개념

임베딩(Embedding)은 Go 언어에서 구조체 타입에 다른 구조체 타입을 익명 필드(anonymous field)로 포함시키는 것을 말합니다. 즉, 구조체 내에 다른 구조체의 필드를 포함시키면, 외부에서 접근할 때는 임베딩된 구조체의 필드명을 사용하지 않고 직접 접근할 수 있습니다.

임베딩(Embedding) 사용 방법

다음은 임베딩을 사용한 구조체의 예시입니다.

type Person struct {
    Name string
    Age int
}

type Employee struct {
    Person
    EmployeeID int
    Salary float64
}

위의 코드에서 Employee 구조체는 Person 구조체를 임베딩하고 있습니다. Person 구조체의 필드들인 NameAgeEmployee 구조체에서 바로 접근할 수 있게 됩니다.

func main() {
    emp := Employee{
        Person: Person{
            Name: "John Doe",
            Age: 25,
        },
        EmployeeID: 12345,
        Salary: 5000.0,
    }

    fmt.Println(emp.Name) // "John Doe"
    fmt.Println(emp.Age)  // 25
    fmt.Println(emp.EmployeeID) // 12345
    fmt.Println(emp.Salary)     // 5000.0
}

위의 예시에서는 emp.Name, emp.Age, emp.EmployeeID, emp.Salary처럼 Employee 구조체의 필드와 임베딩된 Person 구조체의 필드를 모두 접근할 수 있습니다.

임베딩(Embedding)의 장점

구조체의 임베딩을 사용하면 코드의 재사용성과 모듈화를 쉽게 구현할 수 있습니다. 예를 들어, Person 구조체를 다른 구조체에서도 재사용할 수 있으며, 필요한 필드만 추가하거나 재정의하여 사용할 수 있습니다.

또한 임베딩된 구조체의 메서드도 자연스럽게 상속된 것처럼 사용할 수 있습니다. 따라서 임베딩을 잘 활용하면 코드의 가독성을 높이고 중복 코드를 줄일 수 있습니다.

결론

Go 언어에서 구조체의 임베딩은 다른 구조체를 익명 필드로 포함시키는 기능을 제공합니다. 이를 활용하면 코드의 재사용성과 모듈화를 향상시킬 수 있으며, 상속과 비슷한 효과를 얻을 수 있습니다. 구조체 임베딩은 Go 언어의 강력한 기능 중 하나이므로 최대한 적극적으로 활용해보시기 바랍니다.

참고 자료