개발 지식

개발 지식

Go 슬라이스 append는 내부 구조를 이해해야 안전하다

페이지 정보

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

본문

✅ 슬라이스 append는 내부 구조를 이해해야 안전하다

원본이 바뀌는지, 복사되는지 모르면 버그 난다

Go에서 슬라이스는 쉽게 추가할 수 있다:

a := []int{1, 2}
b := a
b = append(b, 3)

❌ 문제 상황

b를 변경했는데 a도 바뀌는 경우가 있다.
반대로 바뀌지 않는 경우도 있다.

→ 이유는 capacity에 따라 달라진다.


✅ 슬라이스 append는 경우에 따라 복사 또는 공유

  • appendcap 이하일 경우: 같은 배열 공유

  • `cap 초과**하면: 새 배열 할당됨 (복사됨)


✅ 안전하게 복사하려면 명시적 copy 사용

a := []int{1, 2}
b := make([]int, len(a))
copy(b, a)
b = append(b, 3) // 이제 a는 안 바뀜

✔️ 슬라이스는 값처럼 보여도 내부는 참조형
append 동작은 메모리 구조에 따라 다르므로 조심해서 써야 한다.

댓글목록

등록된 댓글이 없습니다.