Go slice를 함수에 넘기면 복사될까? 참조될까?
페이지 정보

영삼이
본문
✅ slice를 함수에 넘기면 복사될까? 참조될까?
값처럼 보여도 내부는 공유된다
Go에서 슬라이스는 값 타입이지만,
내부 데이터는 포인터로 참조한다:
func modify(s []int) {
s[0] = 99
}
✅ 슬라이스를 함수에 넘기면
nums := []int{1, 2, 3}
modify(nums)
fmt.Println(nums) // [99 2 3]
-
슬라이스 자체는 복사되지만
-
내부 배열은 공유되므로 원본도 변경됨
❗ 문제 발생 가능
func appendInside(s []int) {
s = append(s, 4) // 새로운 배열로 복사될 수 있음
}
-
내부 배열의
cap
이 초과되면 -
새 배열로 바뀌고 원본에는 영향 없음
✅ 원본을 안전하게 유지하려면
-
복사해서 전달:
copy(newSlice, oldSlice)
-
명확하게 동작을 의도해야 함
✔️ 슬라이스는 값 같지만
참조와 복사 개념이 함께 있는 복합 타입
언제 공유되고 언제 복사되는지 이해하고 써야 안전하다.
- 이전글time.After는 남용하면 메모리 누수난다 25.03.28
- 다음글nil 인터페이스는 진짜 nil이 아닐 수 있다 25.03.28
댓글목록
등록된 댓글이 없습니다.