개발 지식

개발 지식

Go 구조체 포인터냐 값이냐, 선택이 중요하다

페이지 정보

profile_image
영삼이
0건 117회 25-03-28 15:06

본문

✅ 구조체 포인터냐 값이냐, 선택이 중요하다

작은 차이가 복사 비용과 동작을 바꾼다

Go에선 구조체를 함수 인자로 줄 때
이나 포인터 둘 다 사용할 수 있다:

type User struct {
	Name string
	Age  int
}

func Update(u User) {
	u.Age = 100
}

❌ 문제 상황: 값으로 넘기면 복사된다

user := User{Name: "Kim", Age: 20}
Update(user)
fmt.Println(user.Age) // 여전히 20
  • 구조체가 함수로 복사되어 전달

  • 함수 내부에서 바뀌어도 원본엔 영향 없음


✅ 해결: 포인터로 넘기면 참조된다

func Update(u *User) {
	u.Age = 100
}

user := User{Name: "Kim", Age: 20}
Update(&user)
fmt.Println(user.Age) // 100

  • 참조 방식이기 때문에 실제 값이 변경됨

  • 큰 구조체일 경우 성능상 포인터가 유리


✔️ 구조체가 작고 변경이 필요 없다면
변경이 필요하거나 크다면 포인터
의도를 반영한 선택이 고수의 판단 기준이다.

댓글목록

등록된 댓글이 없습니다.