🔥 포인터를 통한 구조체 필드 접근
228자
3분
구조체 포인터를 통해 구조체의 필드에 접근할 수 있습니다.
구조체 포인터 p
를 통해 구조체의 X
필드에 접근하려면 (*p).X
와 같이 작성할 수 있지만, 이 표기법은 다소 번거롭습니다. 그래서 Go 언어에서는 명시적인 역참조 없이 그냥 p.X
라고 쓸 수 있도록 허용하고 있습니다.
다음 코드를 살펴봅시다:
package main import "fmt" type Vertex struct { X int Y int } func main() { v := Vertex{1, 2} // Vertex 구조체 변수 v를 선언하고 초기값을 설정합니다. p := &v // v의 주소를 구조체 포인터 p에 할당합니다. p.X = 1e9 // 구조체 포인터 p를 통해 v의 X 필드 값을 1e9로 변경합니다. fmt.Println(v) // 변경된 v의 값을 출력합니다. }
go
위 코드에서는 다음과 같은 순서로 동작이 이뤄집니다:
Vertex
구조체 타입을 정의합니다. 이 구조체는X
와Y
라는 두 개의int
타입 필드를 가집니다.main
함수에서Vertex
구조체 변수v
를 선언하고{1, 2}
로 초기화합니다.v
의 주소를 구조체 포인터p
에 할당합니다. 이제p
는v
를 가리키는 포인터입니다.- 구조체 포인터
p
를 통해v
의X
필드 값을1e9
로 변경합니다. 여기서p.X
라고 쓰면 자동으로 역참조되어(*p).X
와 같이 동작합니다. - 변경된
v
의 값을 출력합니다.{1000000000 2}
가 출력될 것입니다.
이처럼 구조체 포인터를 통해 간편하게 구조체의 필드에 접근하고 값을 변경할 수 있습니다. 명시적인 역참조 없이 .
연산자만으로 필드에 바로 접근할 수 있어 코드가 간결해집니다.
구조체 포인터를 활용하면 함수 내에서 구조체의 필드를 직접 변경할 수 있게 되므로, 구조체 변수를 함수에 전달할 때 값 복사가 아닌 참조로 전달하여 메모리 사용량을 줄일 수 있습니다.