Go의 딥 카피
Jay Singh
2023년6월20일
객체의 복제본을 생성하려고 하면 전체 복사가 원본 객체의 모든 필드를 정확하게 복사합니다. 또한 필드로 개체가 있는 경우 해당 항목의 복사본도 만들어집니다.
즉, 참조(개체)를 포함하는 개체에 대해 전체 복사를 수행하면 원본 개체와 복제된 개체가 모두 별도의 개체를 참조하며 복사된 개체의 데이터에 대한 변경 내용이 원래 개체에 반영되지 않습니다.
Go에서 깊은 복사를 수행하는 방법을 더 잘 이해하기 위해 몇 가지 사례를 살펴보겠습니다.
Go에서 struct
를 사용하여 딥 카피 수행
이러한 깊은 복사를 수동으로 수행할 수 있습니다. 슬라이스의 경우 다음 코드를 사용하여 전체 복사를 수행합니다.
슬라이스가 동일한 슬라이스에 대한 참조일 뿐만 아니라 완전히 별개의 개체임을 알 수 있습니다.
예:
package main
import (
"fmt"
)
type Cat struct {
age int
name string
friends []string
}
func main() {
harry := Cat{1, "Harry", []string{"Ron", "Jenny", "Kety"}}
jay := harry
jay.friends = make([]string, len(harry.friends))
copy(jay.friends, harry.friends)
jay.friends = append(jay.friends, "Sid")
fmt.Println(harry)
fmt.Println(jay)
}
산출
{1 Harry [Ron Jenny Kety]}
{1 Harry [Ron Jenny Kety Sid]}