Go언어에서는 두 개 이상의 변수를 모아 놓은 것을 '컬렉션'이라고 합니다. 배열을 포함한 컬렉션은 다수의 데이터를 저장하고 처리하는 경우에 유용하고 굉장히 많이 쓰입니다. 컬렉션은 그 기능에 따라 이름이 다른 세 가지 용법이 있습니다. 이번 강의에서 다룰 내용은 배열(Array)입니다.
Go언어에서의 배열은 정적입니다. 즉, 고정된 배열 크기 안에 동일한 데이터를 연속적으로 저장할 수 있다는 뜻입니다. 그래서 크기를 동적으로 증가시키거나 부분 배열을 발췌하는 등의 기능을 가지고있지 않습니다. 배열의 선언은 "var 배열이름 [배열크기]자료형" 형식으로 합니다. 여기서 배열 크기를 데이터 타입 앞에 쓰는 것은 C언어와 Java 같은 다른 언어들과 다릅니다. Go언어에서는 배열의 크기는 자료형을 구성하는 한 요소입니다. 따라서, [3]int와 [5]int는 string과 float32처럼 타입 자체가 다른 것입니다. 배열이 선언되면 배열의 요소를 인덱스를 사용하여 읽거나 쓸 수 있습니다.
배열을 선언하고 읽고 쓰는 아래에 예시 코드를 바로 실행해보세요.
package main
import "fmt"
func main() {
var arr1 [5]int //길이가 5인 int형 배열 arr1을 선언
fmt.Println(arr1) //숫자를 선언하지 않고 출력해보기
arr1 = [5]int{1, 2, 3, 4, 5} //배열 초기화
fmt.Println(arr1, arr1[0], arr1[4]) //배열 전체와 인덱스에 저장된 값들 출력해보기
arr2 := [4]int{4, 5, 6, 7} //:= 를 이용해 선언
arr2[0] = 32 //인덱스를 이용해 값을 초기화
fmt.Println(arr2) //arr2 전체 출력해보기
var arr3 = [...]int{9, 8, 7, 6} //[...]을 이용한 배열 크기 자동 설정
fmt.Println(arr3, len(arr3)) //arr3 전체와 배열 크기 출력해보기
}예시 코드에서 보았듯이, 배열은 다양한 방법으로 선언하고 초기화할 수 있습니다. 위 예시에서 미리 설명하지 않은 용법이 쓰였습니다. 바로 배열의 길이를 알 수 있는 len() 함수와 [...] 용법입니다. Go언어에서 지원하는 내장 함수 len()을 사용하면 배열의 길이(요소의 개수)를 알 수 있습니다. 그리고 선언할 때 [...] 용법을 사용하면 배열 크기를 자동으로 설정해줍니다. 그렇다고해서 이후에 크기를 바꿀 수 있는 것은 아니라는 것을 주의해야합니다.
다차원 배열
다른 언어들과 마찬가지로 Go언어도 다차원 배열을 지원합니다. 배열을 선언하는 것에 있어 특별한 차이점은 없기때문에 간단한 형태만 보여주도록 하겠습니다.
var multiArray [2][3][4]int //3차원 배열 선언
multiArray[1][1][2] = 10 // 인덱스를 이용한 값 초기화또한, 배열을 행렬과 같은 형태로 보기 쉽게 묶어서 초기화할 수 있습니다. 차원은 얼마든지 늘릴 수 있지만 4차원 이상은 거의 쓰이지 않습니다.
아래에 다차원 배열을 한번에 선언하고 초기화 하는 예시 코드를 바로 실행해보세요.
package main
import "fmt"
func main() {
var a = [3][3]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}, //3x3배열 초기화
}
fmt.Println(a[1][2]) //2행 3열의 값 출력
}