Go(golang) 배열(array)과 슬라이스(slice)
안녕하세요. 알렉스입니다. 이번에는 go언어의 배열과 슬라이스에 대해서 알아보겠습니다. Go에서는 배열보다 슬라이스를 자주 사용하지만 슬라이스 밑에는 배열이 존재하고 있습니다. 따라서 배열을 먼저 배우고 슬라이스와 어떤관계에 있는지 알아보겠습니다.
위 사진은 길이가 5인 배열입니다. go에서 위 배열 및 기타 코드를 작성하겠습니다.
package main
import (
"fmt"
)
func main() {
// 배열 생성하기
arr := [5]int{1, 2, 3, 4, 5}
fmt.Println(arr) // 해당 배열 출력
for i, v := range arr {
fmt.Println(i, v) // 인덱스와 배열값을 1줄씩 출역
}
var x int = 3
fmt.Printf("%d인덱스의 배열값은 : %d\n", x, arr[x])
arr[x] = 10
fmt.Printf("%d인덱스에 변경된 배열값은 : %d\n", x, arr[x])
fmt.Printf("배열 길이 : %d, 배열의 용량 : %d\n", len(arr), cap(arr))
fmt.Printf("원소의 타입 : %T\n", arr[0])
}
위 코드를 실행한 결과를 확인하면 배열의 인덱스는 0부터 시작이 되고 4에서 끝납니다. 따라서 값 4를 배열에서 출력할려면 인덱스3을 입력해야 합니다.
그런데 일반적으로 배열은 처음 배열을 만들때 정한 길이에서 더이상 늘어나지 않습니다.(만약 더 넣고 싶다면 길이가 더 긴 배열을 만들어서 해당값을 넣어야 합니다.) 하지만 슬라이스를 이용하면 이러한 불편함을 덜수 있습니다.
package main
import (
"fmt"
)
func main() {
// 슬라이스 생성하기
slice := []int{1, 2, 3, 4, 5}
fmt.Println(slice) // 해당 슬라이스 출력
for i, v := range slice {
fmt.Println(i, v) // 인덱스와 슬라이스 값을 1줄씩 출역
}
var x int = 3
fmt.Printf("%d인덱스의 슬라이스값은 : %d\n", x, slice[x])
slice[x] = 10
fmt.Printf("%d인덱스에 변경된 슬라이스값은 : %d\n", x, slice[x])
fmt.Printf("슬라이스 길이 : %d, 슬라이스의 용량 : %d\n", len(slice), cap(slice))
fmt.Printf("원소의 타입 : %T\n", slice[0])
}
위 코드와 사진에서 슬라이스 또한 배열과 동일하게 사용할수 있는것을 확인할수 있습니다. 하지만 슬라이스는 배열을 참조하고 있기 때문에 배열이 있어야지만 슬라이스를 쓸수 있죠. go에서는 슬라이스를 만들어도 뒤로는 배열을 만들고 슬라이스로 배정을 합니다.
슬라이스를 수정하고 삭제는 다음 글에서 작성하도록 하겠습니다.
댓글
댓글 쓰기