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

구조체(struct)는 관련된 데이터를 묶어 하나의 자료형으로 정의하는 방법이다. 구조체를 사용하면 하나의 변수 안에 여러 개의 변수를 담을 수 있으므로 더 복잡한 데이터를 다룰 때 유용하게 사용할 수 있다. 이번 글에서는 구조체의 포인터를 사용하는 방법에 대해 알아보도록 하겠다.

구조체 포인터 선언

구조체의 포인터를 선언하는 방법은 일반 변수와 유사하다. 다음은 구조체 포인터를 선언하는 예시이다.

type Person struct {
    name string
    age  int
}

func main() {
    var p *Person
    // 구조체 포인터 p 초기화

    // 포인터를 통해 구조체 필드 값 설정
    p = &Person{
        name: "John Doe",
        age:  30,
    }

    // 포인터를 통해 구조체 필드 값 접근
    fmt.Println("이름:", p.name)
    fmt.Println("나이:", p.age)
}

위의 코드에서 p *Person은 구조체 포인터를 선언하는 부분이다. 이 포인터는 Person 구조체 타입의 변수를 가리킬 수 있는 포인터이다.

구조체 포인터 초기화

구조체 포인터를 초기화하는 방법은 두 가지가 있다. 첫 번째는 구조체의 필드 값을 직접 지정하는 것이고, 두 번째는 new() 함수를 사용하는 것이다. 아래는 두 가지 방법을 모두 사용한 예시이다.

type Person struct {
    name string
    age  int
}

func main() {
    var p *Person

    // 방법 1: 구조체 포인터 초기화 (필드 값 직접 지정)
    p = &Person{
        name: "John Doe",
        age:  30,
    }

    // 방법 2: 구조체 포인터 초기화 (new() 함수 사용)
    p = new(Person)
    p.name = "Jane Smith"
    p.age = 25

    fmt.Println("이름:", p.name)
    fmt.Println("나이:", p.age)
}

구조체 포인터로 필드 값 접근

구조체 포인터를 통해 필드에 접근하는 방법은 일반적인 포인터의 접근 방식과 동일하다. 포인터 연산자 ->를 사용하여 필드에 접근할 수 있다. 아래의 예시 코드를 참고하자.

type Person struct {
    name string
    age  int
}

func main() {
    var p *Person
    p = &Person{
        name: "John Doe",
        age:  30,
    }

    // 포인터를 통해 구조체 필드 값 접근
    fmt.Println("이름:", p.name)
    fmt.Println("나이:", p.age)

    // 포인터를 통해 구조체 필드 값 변경
    p.name = "Jane Smith"
    p.age = 25

    fmt.Println("이름:", p.name)
    fmt.Println("나이:", p.age)
}

위의 예시 코드에서는 구조체 포인터 p를 통해 nameage 필드의 값을 접근하고 변경하는 방법을 보여준다.

구조체의 포인터 사용 방법에 대해 알아보았다. 구조체 포인터를 사용하면 구조체 변수를 효과적으로 다룰 수 있으므로, 복잡한 데이터 처리에 활용할 수 있다. 구조체 포인터를 잘 활용하여 프로그래밍을 하면 보다 유연하고 효율적인 코드를 작성할 수 있을 것이다.