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

영삼이
본문
✅ 슬라이스 append는 내부 구조를 이해해야 안전하다
원본이 바뀌는지, 복사되는지 모르면 버그 난다
Go에서 슬라이스는 쉽게 추가할 수 있다:
a := []int{1, 2}
b := a
b = append(b, 3)
❌ 문제 상황
b
를 변경했는데 a
도 바뀌는 경우가 있다.
반대로 바뀌지 않는 경우도 있다.
→ 이유는 capacity에 따라 달라진다.
✅ 슬라이스 append는 경우에 따라 복사 또는 공유
-
append
가 cap 이하일 경우: 같은 배열 공유 -
`cap 초과**하면: 새 배열 할당됨 (복사됨)
✅ 안전하게 복사하려면 명시적 copy 사용
a := []int{1, 2}
b := make([]int, len(a))
copy(b, a)
b = append(b, 3) // 이제 a는 안 바뀜
✔️ 슬라이스는 값처럼 보여도 내부는 참조형
append 동작은 메모리 구조에 따라 다르므로 조심해서 써야 한다.
- 이전글Go의 기본값(zero value)을 믿고 초기화 안 하면 낭패 본다 25.03.28
- 다음글✅ select 문에 default 없으면 고루틴이 멈출 수 있다 25.03.28
댓글목록
등록된 댓글이 없습니다.