구조체(struct)와 포인터(pointer)는 Go 언어에서 매우 중요한 개념입니다. 구조체는 여러 개의 변수들을 묶어 하나의 새로운 자료형을 만들 수 있도록 해줍니다. 포인터는 변수의 주소를 가리키는 변수로, 메모리 주소에 직접 접근할 수 있게 해줍니다. 이번 글에서는 구조체와 포인터의 관계와 사용법에 대해 알아보겠습니다.
구조체 정의하기
구조체를 정의하기 위해서는 type
키워드를 사용합니다. 각 변수의 타입과 이름을 지정하여 구조체를 선언할 수 있습니다. 다음은 예시입니다.
type Person struct {
name string
age int
address string
}
위 예시에서 Person
이라는 구조체를 정의하였습니다. 이 구조체는 name
, age
, address
라는 변수들로 이루어져 있습니다.
구조체 포인터 선언하기
구조체 포인터를 선언하려면 포인터 연산자 *
를 사용해야 합니다. 구조체 포인터는 구조체의 주소를 가리키는 변수입니다. 다음은 예시입니다.
var p *Person
위 예시에서 p
는 Person
구조체의 포인터를 가리키는 변수입니다.
구조체 포인터 사용하기
구조체 포인터를 사용하여 구조체 멤버에 접근하려면 역참조 연산자 .
을 사용합니다. 예를 들어, p
가 가리키는 구조체의 name
멤버에 접근하려면 다음과 같이 작성합니다.
p.name = "John"
구조체 포인터를 선언할 때는 &
연산자를 사용하여 구조체 변수의 주소를 할당해야 합니다. 다음은 예시입니다.
var p *Person
p = &Person{"John", 25, "123 Main St"}
위 예시에서 p
는 Person
구조체의 포인터로, name
에 “John”, age
에 25, address
에 “123 Main St” 값을 가지게 됩니다.
구조체 포인터로 함수에 인자 전달하기
구조체 포인터를 사용하여 함수에 인자를 전달할 수도 있습니다. 이렇게 함으로써 함수 내에서 구조체의 멤버를 수정할 수 있습니다. 예를 들어, 다음과 같이 함수를 정의하고 사용할 수 있습니다.
func updatePerson(p *Person) {
p.age = 30
}
위 함수는 Person
구조체의 포인터를 인자로 받아서 age
멤버를 30으로 변경하는 역할을 합니다.
결론
구조체와 포인터는 Go 언어에서 자주 사용되는 기능 중 하나입니다. 구조체는 여러 변수들을 묶어 하나의 새로운 자료형을 만들 수 있게 해주며, 포인터는 메모리에 직접 접근할 수 있는 기능을 제공합니다. 구조체와 포인터의 조합을 통해 좀 더 복잡한 데이터 구조와 알고리즘을 구현할 수 있습니다.