Go의 배열

October 21, 2024

Go의 배열

배열은 동일한 타입의 데이터를 연속된 메모리 공간에 저장하는 자료구조이다. Go 언어에서 배열은 다음과 같이 정의한다.
1package main 2 3import "fmt" 4 5func main() { 6 var t [5]float64 = [5]float64{24.0, 25.9, 26.0, 27.0, 28.0} // float64형 5개 요소를 가지는 배열 선언 7 8 for i := 0; i < len(t); i++ { 9 fmt.Println(t[i]) // 배열 요소 출력 10 } 11} 12
만약 값을 지정하지 않고 배열을 선언하면, 각 요소는 타입별 기본값으로 초기화된다.
1package main 2 3import "fmt" 4 5func main() { 6 var t [5]float64 // float64형 5개 요소를 가지는 배열 선언 7 8 for i := 0; i < len(t); i++ { 9 fmt.Println(t[i]) // 배열 요소 출력 10 } 11 12 // 출력 결과 13 // 0 14 // 0 15 // 0 16 // 0 17 // 0 18} 19
배열 선언시 개수는 항상 상수로 지정해야 한다.
1package main 2 3const CONSTANT = 3 4 5func main() { 6 v := 5 7 a := [v]int{1, 2, 3, 4, 5} // 에러 발생 8 b := [CONSTANT]int{1, 2, 3} // 정상 9 10 var c [10]int // 정상 11} 12 13

range

배열을 순회할 때는 range 키워드를 사용한다.
1package main 2 3import "fmt" 4 5func main() { 6 t := [5]float64{24.0, 25.9, 26.0, 27.0, 28.0} // float64형 5개 요소를 가지는 배열 선언 7 8 for i, v := range t { 9 fmt.Println(i, v) // 배열 요소 출력 10 } 11} 12

배열 복사

배열을 복사할 때는 = 연산자를 사용한다.
1package main 2 3import "fmt" 4 5func main() { 6 a := [5]int{1, 2, 3, 4, 5} 7 b := a // 배열 복사 8 9 fmt.Println(a) // [1 2 3 4 5] 10 fmt.Println(b) // [1 2 3 4 5] 11 12 b[0] = 10 // b의 첫 번째 요소를 변경 13 14 fmt.Println(a) // [1 2 3 4 5] 15 fmt.Println(b) // [10 2 3 4 5] 16} 17
만약 복사한 배열의 타입이 다르다면, 컴파일 에러가 발생한다.
1package main 2 3import "fmt" 4 5func main() { 6 a := [5]int{1, 2, 3, 4, 5} 7 var b [5]int64 8 9 b = a // 에러 발생 10} 11
Go에서 배열의 복사는 깊은 복사이다. 따라서 배열을 복사하면 원본 배열과 복사한 배열은 서로 독립적인 메모리 공간을 가진다.

다차원 배열

다차원 배열은 다음과 같이 정의한다.
1package main 2 3import "fmt" 4 5func main() { 6 var a = [2][2]int{{1, 2}, {3, 4}} 7 8 fmt.Println(a) // [[1 2] [3 4]] 9} 10

배열 크기

Go의 배엻의 크기는 타입의 크기 * 배열의 길이이다. 따라서 배열의 크기는 컴파일 시점에 결정된다.