18.1.1 슬라이스 선언


일반적인 배열은 처음 배열을 만들 때 정한 길에서 더 이상 늘어나지 않는 문제가 있다. 슬라이스를 사용하면 이런 불편함에서 탈출 할 수 있다. 슬라이스는 배열과 비슷하지만 [] 안에 배열의 개수를 적지 않고 선언한다.

var slice []int

슬라이스를 초기화하지 않으면 길이가 0인 슬라이스가 만들어진다. 초기화는 배열과 같다. 슬라이스는 make 함수를 사용해서 초기화 할 수도 있다. 첫 번째 인수로 만들고자 하는 타입을 적어주고, 두 번째 인수로 길이를 적어주면 된다.

var slice = make([]int, 3)

슬라이스의 접근 방법은 배열과 같다. 또한 순회 역시 배열과 같다. 단지 동적으로 길이를 변경할 수 있을 뿐이다.

18.1.2 슬라이스 요소 추가


기본 배열은 한 번 길이가 정해지면 늘릴 수 없으나 슬라이스는 append 함수로 추가 할 수 있다. 또한 아래와 같이 한번에 많은 요소를 추가 할 수도 있다.

slice = append(slice, 1, 2, 3, 4)

첫 번째 인수로 추가하고자 하는 슬라이스를 적어준 뒤 두 번째 인수에 추가 값들을 넣어주면 된다. 그러면 슬라이스가 새롭데 만들어져 리턴해준다. append는 기존 slice에 추가되어 반환하는 것이 아닌, 새로운 슬라이스를 반환하는 것이기 때문이다.

18.2 슬라이스 동작 원리


슬라이스는 내장 타입으로 내구 구현이 감춰져 있지만 reflect 패키지의 SliceHeader 구조체를 사용해 내부 구현을 살펴 볼 수 있다.

type SliceHeader struct {
	Data uintptr
	Len int 
	Cap int 
}