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

영삼이
본문
✅ 구조체 포인터냐 값이냐, 선택이 중요하다
작은 차이가 복사 비용과 동작을 바꾼다
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
-
참조 방식이기 때문에 실제 값이 변경됨
-
큰 구조체일 경우 성능상 포인터가 유리
✔️ 구조체가 작고 변경이 필요 없다면 값
변경이 필요하거나 크다면 포인터
의도를 반영한 선택이 고수의 판단 기준이다.
- 이전글context 없이 만든 서버는 언젠가 고장난다 25.03.28
- 다음글인터페이스는 덕 타이핑이라고? 그게 함정이 될 수도 있다 25.03.28
댓글목록
등록된 댓글이 없습니다.