1. 슬라이스
- 배열과 다르게 크기를 동적으로 변동이 가능하다.
- Go Slice 선언은 배열을 선언하듯이 "var v []T" 처럼 하는데 배열과 달리 크기는 지정하지 않는다. 예를 들어, 정수형 Slice 변수 a를 선언하기 위해서 "var a []int" 처럼 선언할 수 있다.
- make 함수를 통해서 선언이 가능하다.
- make() 함수의 첫번째 파라미터에 생성할 슬라이스 타입을 지정하고, 두번째는 Length (슬라이스의 길이), 그리고 세번째는 Capacity (내부 배열의 최대 길이)를 지정하면, 모든 요소가 Zero value인 슬라이스를 만들게 된다. 여기서 만약 세번째 Capacity 파라미터를 생략하면 Capacity는 Length와 같은 값을 갖는다. 그리고 슬라이스의 길이 및 용량은 내장함수 len(), cap()을 써서 확인할 수 있다.
- 슬라이스에 별도의 길이와 용량을 지정하지 않으면, 기본적으로 길이와 용량이 0 인 슬라이스를 만드는데, 이를 Nil Slice 라 하고, nil 과 비교하면 참을 리턴한다.(nil은 null과 같다고 생각하면 편함)
package main
import "fmt"
func main() {
// 기본 선언
var a []int //슬라이스 변수 선언
a = []int{1, 2, 3} //슬라이스에 리터럴값 지정
a[1] = 10
fmt.Println(a) // [1, 10, 3]출력
// make함수 통한 선언
s := make([]int, 5, 10)
println(len(s), cap(s)) // len 5, cap 10
}
- 개발하면서 가장 많이 쓰는 컬렉션이었다.
2. 부분 슬라이스
- 슬라이스에서 일부를 잘라서 사용 가능하다.
- 부분 슬라이스는 "슬라이스[처음인덱스:마지막인덱스]" 형식으로 생성
- 처음인덱스는 포함, 마지막인덱스는 포함X
- 슬라이스 인덱스는 처음/마지막 둘 중 하나 혹은 둘 다를 생략 가능.
- 처음 인덱스가 생략되면 0 이, 마지막 인덱스가 생략되면 그 슬라이스의 마지막 인덱스가 자동 대입
package main
import "fmt"
func main() {
s := []int{0, 1, 2, 3, 4, 5}
s = s[2:5]
fmt.Println(s) //2,3,4 출력
w = s[1:]
fmt.Println(w) // 3, 4 출력
}
3. 슬라이스 추가,병합(append)과 복사(copy)
- 슬라이스에 새로운 요소를 추가하기 위해서는 Go 내장함수인 append()를 사용한다.
- append()의 첫 파라미터는 슬라이스 객체이고, 두번째는 추가할 요소의 값이다. 또한 여러 개의 요소 값들을 한꺼번에 추가하기 위해서는 append() 두번째 파라미터 뒤에 계속하여 값을 추가할 수 있다.
func main() {
s := []int{0, 1}
// 하나 확장
s = append(s, 2) // 0, 1, 2
// 복수 요소들 확장
s = append(s, 3, 4, 5) // 0,1,2,3,4,5
fmt.Println(s)
}
4. 슬라이스 삭제
- 삭제는 따로 제공하고 있지 않기 때문에 append를 이용해서 삭제한다.
func remove(slice []int, s int) []int {
return append(slice[:s], slice[s+1:]...)
}
func main() {
var Slice1 = []int{1, 2, 3, 4, 5}
fmt.Printf("slice1: %v\n", Slice1) // 1 2 3 4 5
Slice2 := remove(Slice1, 2)
fmt.Printf("slice2: %v\n", Slice2) // 1 2 4 5
}
- append를 사용해서 슬라이스를 합칠때는 뒤쪽 인자 뒤에 ...을 꼭 넣어주어야 한다.
'개발 > Go' 카테고리의 다른 글
[Go] 기초 - 패키지 (0) | 2022.07.25 |
---|---|
[Go] 기초 - 컬렉션 (Map) (0) | 2022.07.22 |
[Go] 기초 - 컬렉션 (배열) (0) | 2022.07.20 |
[Go] 기초 - 클로저 (Closure) (0) | 2022.07.19 |
[Go] 기초 - 익명함수 (0) | 2022.07.18 |