Go Lang 기초 9 - 슬라이스(Slice)
Go Lang의 슬라이스(Slice)는 값을 추가하여 확장가능한 자료구조로 크기가 고정되어 있지 않고 동적으로 배열의 크기를 증가시킬 수 있습니다.
슬라이스는 Go Lang 내장 함수인 make를 통해 공간을 확보할 수 있습니다.
make 함수는 (타입type, 길이length, 용량capacity)를 선언하여 사용합니다. 여기서 용량은 내부배열의 최대길이를 의미합니다.
슬라이스 선언은 배열(Array)과 거의 비슷합니다. 다만, []안에 길이 지정을 하지 않습니다.
var 변수명 [] 데이터타입
예제. 슬라이스 선언하고 길이와 용량 확인하기
package main
import "fmt"
func main() {
s := []int{0, 1, 2, 3, 4, 5}
l := len(s)
fmt.Println(l, cap(s), s)
}
출력결과물
6 6 [0 1 2 3 4 5]
cap()은 배열의 기본 용량을 알려주고, len()은 배열에 몇 개의 항목이 있는지를 알려주는 함수입니다.
len(s)와 cap(s) 를 통해 슬라이스의 길이와 용량를 확인 할 수 있습니다.
make 함수를 사용해 슬라이스를 조금 더 자세히 다뤄보도록 합시다.
s := make([]int, 3, 3)
s는 정수형 타입에 길이가 3이고 용량 3인 슬라이스입니다.
슬라이스로 부터
s[0] = 1
s[1] = 2
s[2] = 3
fmt.Println(s[1])
각 원소자리에 값을 하나씩 지정해주고 출력을 해봅니다.
출력결과물
2
슬라이싱(Slicing)은 슬라이스의 특정 영역을 추출하는 기능입니다.
예제. 슬라이싱 해보기
package main
import "fmt"
func main() {
s := make([]int, 3, 3)
s[0] = 1
s[1] = 2
s[2] = 3
t := s[0:3]
u := s[:3]
v := s[1:]
fmt.Printf("t = %d, u = %d, v = %d", t, u, v)
}
출력결과물
t = [1 2 3], u = [1 2 3], v = [2 3]
슬라이싱의 경우 u는 0번 index부터 3번 index 바로 전까지, v는 2번째 index부터 마지막 index까지 슬라이싱 가능합니다.
예제. 슬라이스의 크기 자동조절 기능 확인하기
package main
import "fmt"
func main() {
s := make([]int, 0, 3)
for i := 0; i < 5; i++ {
s = append(s, i)
fmt.Printf("cap : %v, len : %v, add : %p\n", cap(s), len(s), s)
}
}
출력결과물
cap : 3, len : 1, add : 0xc000016160
cap : 3, len : 2, add : 0xc000016160
cap : 3, len : 3, add : 0xc000016160
cap : 6, len : 4, add : 0xc000018120
cap : 6, len : 5, add : 0xc000018120
Go Lang의 슬라이스는 기본 배열의 크기를 자동으로 조절합니다.
append를 통해 추가한 값이 처음 설정된 용량을 넘어서면 더 큰 용량의 새 슬라이스를 반환합니다. 이 때 포인터 주소도 새로운 주소로 변경됩니다.
'IT > Develop' 카테고리의 다른 글
Go Lang 기초 11 - 구조체(Struct) (0) | 2021.07.28 |
---|---|
Go Lang 기초 10 - 맵(Map) (0) | 2021.07.28 |
Go Lang 기초 8 - 배열(Array) (0) | 2021.07.28 |
Go Lang 기초 7 - 함수 func (0) | 2021.07.28 |
Go Lang 기초 6 - 반복문 For (0) | 2021.07.28 |