언어 및 도구들 공부/Go

Go 포인터 3

Dr.Mlem 2025. 3. 29. 20:47

너가 요청한 포인터 응용 예제들을 간단하고 핵심만 딱 짚는 예시들로 정리해줄게.
총 3가지로 나눠서 설명할게:

  1. 구조체 포인터
  2. 배열 포인터
  3. 함수 인자에 포인터 전달

1️⃣ 구조체 포인터

📌 개념

구조체(예: type Person struct)의 주소를 포인터로 다루면
해당 구조체 안의 값들을 직접 변경할 수 있음.

✅ 예시

type Person struct {
    name string
    age  int
}

func main() {
    p := Person{name: "Alice", age: 25}
    ptr := &p // 구조체 포인터

    ptr.age = 30 // 포인터를 통해 구조체 내부 값 변경

    fmt.Println(p.age) // 출력: 30
}

🧠 ptr.age는 사실 (*ptr).age를 축약한 문법이야.


2️⃣ 배열 포인터

📌 개념

배열 자체의 주소를 포인터로 받으면, 배열 전체를 가리킬 수 있음.

✅ 예시

func main() {
    arr := [3]int{1, 2, 3}
    ptr := &arr // [3]int 타입의 배열을 가리키는 포인터

    (*ptr)[0] = 100

    fmt.Println(arr) // 출력: [100 2 3]
}

🧠 배열 포인터는 *[3]int 타입이며, (*ptr)[i] 형식으로 접근해야 해.


3️⃣ 함수 인자로 포인터 전달

📌 개념

값이 아닌 주소를 전달해서, 함수 내부에서 원본을 수정할 수 있게 함.

✅ 예시

func changeValue(n *int) {
    *n = 999
}

func main() {
    num := 10
    changeValue(&num)

    fmt.Println(num) // 출력: 999
}

🧠 &num을 넘기면 num의 주소가 전달되고,
*n = 999로 실제 num 값이 바뀜.


✅ 요약 표

케이스 설명 포인트
구조체 포인터 구조체 필드 직접 수정 가능 ptr.field = ...
배열 포인터 배열 전체를 가리킴 (*ptr)[i] = ...
함수에 포인터 전달 함수 내에서 외부 변수 수정 가능 *n = ...

원한다면 각 예제를 실행 가능한 하나의 파일로도 정리해줄게.
어떤 예제가 더 궁금하거나 확장하고 싶은 주제 있어?