Back-End/Go
[GO] 5장 배열과 슬라이스
Tinkies
2025. 2. 28. 02:02
Go 언어에서 배열과 슬라이스는 중요한 데이터 구조입니다. 이 두가지는 서로 다르게 동작해, 각각의 특성과 사용 용도를 이해할 수 있습니다.
1. 배열(Array)
- 정적 크기: 배열은 선언 시 크기가 고정되며, 이후 크기를 변경할 수 있음
- 메모리 할당: 배열은 연속된 메모리 블록에 할당
- 값 타입: 배열은 값 타입으로, 배열은 다른 변수에 할당하면 복사가 이루어짐
package main
import "fmt"
func main() {
var arr[6]int // 크기가 6일 배열 선언
arr[0] = 1
arr[1] = 2
fmt.Println(arr) // [1,2,0,0,0,0]
}
2. 슬라이스 (Slice)
- 동적 크기: 슬라이스는 동적으로 크기를 조정할 수 있으며, 배열에 대한 레퍼런스
- 메모리 할당: 슬라이스는 내부적으로 배열을 참조해, 길이와 용량을 가짐
- 참조 타입: 슬라이스는 참조 타입으로, 슬라이스를 다른 변수에 할당하면 같은 배열을 참조
package main
import "fmt"
func main() {
slice := []int{1,2,3} // 슬라이스 선언
fmt.Println(slice); // [1,2,3]
slice = append(slice, 4); // 슬라이스에 값 추가
fmt.Println(slice) // [1 2 3 4]
}
3. 배열과 슬라이스의 차이점
특성 | 배열 | 슬라이스 |
크기 | 고정 크기 | 동적 크기 |
타입 | 값 타입 | 참조 타입 |
메모리 할당 | 연속된 메모리 블록 | 내부 배열을 참조 |
할당 방법 | var arr [5]int | slice := [ ] int { } 또는 make |
기본값 | 0으로 초기화 | null로 초기화 |
4. 슬라이스를 사용한 동적 배열 처리
슬라이스는 Go에서 동적 배열을 처리하는 데 유용합니다. 슬라이스는 append 함수를 사용해 요소를 추가할 수 있으며, 필요에 따라 크기를 자동으로 조정합니다.
package main
import "fmt"
func main() {
var dynamicSlice []int // 슬라인스 선언 (nil 상태)
// 슬라이스에 값 추가
for i := 0; i < 10; i++ {
dynamicSlice = append(dynamicSlice, i)
}
fmt.Println(dynamicSlice); // [0 1 2 3 4 5 6 7 8 9]
// 슬라이스의 길이와 용량
fmt.Println("Length:", len(dynamicSlice)) // Length: 10
fmt.Println("Capacity:", len(dynamicSlice)) // Capacity: 10 (초기 용량)
}
5. 슬라이스의 용량 증가
슬라이스의 크기를 초과하여 요소를 추가할 경우, Go에는 새로운 배열을 할당하고 기존 데이터를 복사합니다. 이는 성능에 영향을 미칠 수 있으며, 예상되는 용량을 미리 지정하는 것이 좋습니다.
package main
import "fmt"
func main() {
// 초기 용량을 5로 설정
slice := make([]int, 0, 5)
for i := 0; i < 10; i++ {
slice = append(slice, i)
fmt.Printf("Length: %d, Capacity: %d\n", len(slice), cap(slice))
}
}
요약
- 배열: 고정 크기, 값 타입, 메모리에서 연속적으로 할당
- 슬라이스: 동적 크기, 참조 타입, 배열을 참조하여 유연한 데이터 구조 제공
- 슬라이스 사용: append 함수를 통해 동적으로 요소를 추가할 수 있으며, 필요에 따라 메모리에서 새 배열 할당
GitHub - Koras02/Go-Bloging: https://thinky.tistory.com/category/Back-End/Go
https://thinky.tistory.com/category/Back-End/Go. Contribute to Koras02/Go-Bloging development by creating an account on GitHub.
github.com
LIST