개발 지식

개발 지식

Go slice를 함수에 넘기면 복사될까? 참조될까?

페이지 정보

profile_image
영삼이
0건 121회 25-03-28 15:09

본문

✅ 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)

  • 명확하게 동작을 의도해야 함


✔️ 슬라이스는 값 같지만
참조와 복사 개념이 함께 있는 복합 타입
언제 공유되고 언제 복사되는지 이해하고 써야 안전하다.

댓글목록

등록된 댓글이 없습니다.