GO · 컬렉션
슬라이스 — Go의 핵심 자료구조
슬라이스는 동적 배열입니다. 내부적으로 배열 포인터, 길이, 용량을 갖습니다.
컬렉션입문slice슬라이스appendcopymake
핵심 설명
슬라이스는 동적 배열입니다. 내부적으로 배열 포인터, 길이, 용량을 갖습니다.
Go code
package main
import "fmt"
func main() {
// 슬라이스 생성
s1 := []int{1, 2, 3, 4, 5}
s2 := make([]int, 5) // len=5, cap=5, 제로값
s3 := make([]int, 3, 10) // len=3, cap=10
// append — 용량 초과 시 새 배열 할당 (약 2배)
s := []int{1, 2, 3}
s = append(s, 4)
s = append(s, 5, 6, 7) // 여러 값
s = append(s, s1...) // 슬라이스 전개
// 슬라이싱 [low:high:max]
fmt.Println(s[1:4]) // [2 3 4]
fmt.Println(s[:3]) // [1 2 3]
fmt.Println(s[3:]) // [4 5 6 7 1 2 3 4 5]
// copy — 독립적인 복사
dst := make([]int, 3)
n := copy(dst, s1)
fmt.Println(dst, n) // [1 2 3] 3
// 2D 슬라이스
matrix := make([][]int, 3)
for i := range matrix {
matrix[i] = make([]int, 3)
for j := range matrix[i] { matrix[i][j] = i*3 + j }
}
// 슬라이스 함수들 (Go 1.21+)
// slices.Sort, slices.Contains, slices.Index
// import "slices"
// 삭제 — 순서 유지
i := 2
s1 = append(s1[:i], s1[i+1:]...)
fmt.Println(s1) // [1 2 4 5]
// 삭제 — 순서 무관 (빠름)
s2[i] = s2[len(s2)-1]
s2 = s2[:len(s2)-1]
fmt.Println(len(s3), cap(s3)) // 3 10
_ = s2
}학습 팁
슬라이스는 배열의 참조입니다. s2 := s1로 복사하면 같은 배열을 공유합니다. 독립적인 복사가 필요하면 copy()나 append([]int{}, s...)를 사용하세요.
주의할 점
슬라이스 중간 원소 삭제 시 append(s[:i], s[i+1:]...)는 원본 슬라이스를 수정합니다. 원본이 필요하면 먼저 복사하세요.
자주 묻는 질문
슬라이스 — Go의 핵심 자료구조란 무엇인가요?
슬라이스는 동적 배열입니다. 내부적으로 배열 포인터, 길이, 용량을 갖습니다.
슬라이스 — Go의 핵심 자료구조 학습 시 주의할 점은 무엇인가요?
슬라이스 중간 원소 삭제 시 append(s[:i], s[i+1:]...) 는 원본 슬라이스를 수정합니다. 원본이 필요하면 먼저 복사하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.