🔥 슬라이스에 요소 추가하기

359자
4분

Go 언어에서 슬라이스에 새로운 요소를 추가하는 일은 항상 있어요. 이를 위해 Go는 내장 함수인 append를 제공하죠. append에 대한 설명은 내장 패키지의 문서에 있습니다.

func append(s []T, vs ...T) []T
 
go

append의 첫 번째 매개변수 s는 타입 T의 슬라이스이고, 나머지는 슬라이스에 추가할 T 타입의 값들이에요.

append의 반환값은 원래 슬라이스의 모든 요소와 제공된 값들을 포함하는 슬라이스예요.

만약 s의 내부 배열이 주어진 모든 값을 담기에 너무 작다면, 더 큰 배열이 할당될 거예요. 반환된 슬라이스는 새로 할당된 배열을 가리키게 되죠.

(슬라이스에 대해 더 알고 싶다면, Slices: usage and internals 글을 읽어보세요.)

자, 그럼 코드 예제와 함께 하나씩 살펴볼까요?

package main
 
import "fmt"
 
func main() {
	var s []int
	printSlice(s)
	// 출력: len=0 cap=0 []
 
	// append는 nil 슬라이스에도 동작해요.
	s = append(s, 0)
	printSlice(s)
	// 출력: len=1 cap=1 [0]
 
	// 슬라이스는 필요에 따라 늘어나요.
	s = append(s, 1)
	printSlice(s)
	// 출력: len=2 cap=2 [0 1]
 
	// 한 번에 여러 개의 요소를 추가할 수도 있어요.
	s = append(s, 2, 3, 4)
	printSlice(s)
	// 출력: len=5 cap=6 [0 1 2 3 4]
}
 
func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
 
go

먼저, s라는 빈 정수 슬라이스를 선언했어요. 그리고 printSlice 함수를 호출하여 슬라이스의 길이, 용량, 요소들을 출력했죠.

var s []int
printSlice(s)
// 출력: len=0 cap=0 []
 
go

appendnil 슬라이스에도 동작해요. s에 0을 추가하고 다시 printSlice를 호출하면, 슬라이스의 길이와 용량이 1로 늘어나고 요소는 [0]이 되었음을 볼 수 있어요.

s = append(s, 0)
printSlice(s)
// 출력: len=1 cap=1 [0]
 
go

슬라이스는 필요에 따라 자동으로 늘어나요. 1을 추가하면 슬라이스의 길이와 용량이 2로 늘어나고 요소는 [0 1]이 되죠.

s = append(s, 1)
printSlice(s)
// 출력: len=2 cap=2 [0 1]
 
go

append를 사용하면 한 번에 여러 개의 요소를 추가할 수도 있어요. 2, 3, 4를 한 번에 추가해 보면, 슬라이스의 길이는 5, 용량은 6으로 늘어나고 요소는 [0 1 2 3 4]가 됩니다.

s = append(s, 2, 3, 4)
printSlice(s)
// 출력: len=5 cap=6 [0 1 2 3 4]
 
go

이렇게 append를 사용하면 슬라이스에 새로운 요소를 쉽게 추가할 수 있어요. 슬라이스의 용량이 부족하면 자동으로 새로운 배열을 할당하고, 슬라이스는 그 배열을 가리키게 되죠.

Go의 슬라이스와 append 함수를 활용하면 동적으로 크기가 변하는 데이터를 유연하게 다룰 수 있답니다. 코드가 간결해지고 메모리 관리도 편해지겠죠?