구조체(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
구조체의 필드들인 Name
과 Age
는 Employee
구조체에서 바로 접근할 수 있게 됩니다.
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 언어의 강력한 기능 중 하나이므로 최대한 적극적으로 활용해보시기 바랍니다.
참고 자료