[go] 구조체(struct)와 포인터의 관계와 사용법

구조체(struct)와 포인터(pointer)는 Go 언어에서 매우 중요한 개념입니다. 구조체는 여러 개의 변수들을 묶어 하나의 새로운 자료형을 만들 수 있도록 해줍니다. 포인터는 변수의 주소를 가리키는 변수로, 메모리 주소에 직접 접근할 수 있게 해줍니다. 이번 글에서는 구조체와 포인터의 관계와 사용법에 대해 알아보겠습니다.

구조체 정의하기

구조체를 정의하기 위해서는 type 키워드를 사용합니다. 각 변수의 타입과 이름을 지정하여 구조체를 선언할 수 있습니다. 다음은 예시입니다.

type Person struct {
    name string
    age  int
    address string
}

위 예시에서 Person이라는 구조체를 정의하였습니다. 이 구조체는 name, age, address라는 변수들로 이루어져 있습니다.

구조체 포인터 선언하기

구조체 포인터를 선언하려면 포인터 연산자 *를 사용해야 합니다. 구조체 포인터는 구조체의 주소를 가리키는 변수입니다. 다음은 예시입니다.

var p *Person

위 예시에서 pPerson 구조체의 포인터를 가리키는 변수입니다.

구조체 포인터 사용하기

구조체 포인터를 사용하여 구조체 멤버에 접근하려면 역참조 연산자 .을 사용합니다. 예를 들어, p가 가리키는 구조체의 name 멤버에 접근하려면 다음과 같이 작성합니다.

p.name = "John"

구조체 포인터를 선언할 때는 & 연산자를 사용하여 구조체 변수의 주소를 할당해야 합니다. 다음은 예시입니다.

var p *Person
p = &Person{"John", 25, "123 Main St"}

위 예시에서 pPerson 구조체의 포인터로, name에 “John”, age에 25, address에 “123 Main St” 값을 가지게 됩니다.

구조체 포인터로 함수에 인자 전달하기

구조체 포인터를 사용하여 함수에 인자를 전달할 수도 있습니다. 이렇게 함으로써 함수 내에서 구조체의 멤버를 수정할 수 있습니다. 예를 들어, 다음과 같이 함수를 정의하고 사용할 수 있습니다.

func updatePerson(p *Person) {
    p.age = 30
}

위 함수는 Person 구조체의 포인터를 인자로 받아서 age 멤버를 30으로 변경하는 역할을 합니다.

결론

구조체와 포인터는 Go 언어에서 자주 사용되는 기능 중 하나입니다. 구조체는 여러 변수들을 묶어 하나의 새로운 자료형을 만들 수 있게 해주며, 포인터는 메모리에 직접 접근할 수 있는 기능을 제공합니다. 구조체와 포인터의 조합을 통해 좀 더 복잡한 데이터 구조와 알고리즘을 구현할 수 있습니다.