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

359자
4분

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

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

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

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

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

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

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

go
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
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)
}
 

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

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

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

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

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

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

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

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

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

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

YouTube 영상

채널 보기
스칼라 곱셈과 내적의 기하학적 의미 | 선형대수학
AI는 왜 수백 차원의 벡터를 사용할까? 고차원 공간과 행렬 | 선형대수학
우리가 매일 쓰는 맞춤법 검사기와 라우터 속에 숨겨진 알고리즘은? | Trie 자료구조 이야기
트라이(Trie)에서 단어를 삭제하는 방법 | Trie 자료구조 이야기
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
마지막편, 트라이 노드를 50% 이상 줄이는 방법? 압축 트라이 성능 분석 | Trie 자료구조 이야기
Trie 자료구조 완전 정복 - 개념부터 시각화까지 | Trie 자료구조 이야기
7편, 파이썬으로 구현하는 B-Tree