개요
이번 블로그 포스트에서는 Golang에서 array
(배열)를 사용하여 변수를 선언하고 사용하는 방법에 대해서 살펴보려고 합니다. 이 블로그 포스트에서 소개하는 코드는 다음 링크를 통해 확인하실 수 있습니다.
배열
Golang에서 배열은 같은 데이터 타입에 데이터들을 저장하기 위한 타입으로써, 연속된 메모리에 데이터가 저장됩니다. 배열은 다음과 같이 선언하여 사용할 수 있습니다.
var 변수명 [요소 개수]타입
var a [5]int
다음과 같이 배열은 선언한 경우, 크기가 5이며 int
형 값을 저장하는 배열이 생성되고, 초기값이 선언되지 않았기 때문에, int
의 기본값인 0
이 할당되게 됩니다.
var a [5]int
배열 선언시 배열의 크기는 상수만 사용이 가능하며, 변수를 사용한 경우 컴파일 오류가 발생합니다.
const LEN = 5
var a = [LEN]int
// Error
len := 5
var b := [len]int
이를 확인한기 위해 main.go
파일을 생성하고 다음과 같이 수정합니다.
package main
import "fmt"
func main() {
var a [5]int
fmt.Println(a)
const LEN = 5
var b [LEN]int
fmt.Println(b)
// ERROR
// var len = 5
// var c [len]int
// fmt.Println(c)
}
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
# go run main.go
[0 0 0 0 0]
[0 0 0 0 0]
초기값
Golang에서 배열은 다음과 같이 변수를 선언할 때, 초기값을 설정할 수 있습니다.
var a [5]int = [5]int{1, 2, 3, 4, 5}
// [1 2 3 4 5]
var a = [5]int{1, 2, 3, 4, 5}
// [1 2 3 4 5]
배열도 변수 할당이므로 다음과 같이 선언 대입문
을 사용할 수 있습니다.
days := [3]string{"Mon", "Tue", "Wed"}
// [Mon Tue Wed]
초기값은 다음과 같이 일부만 설정할 수 있으며, 초기값이 설정되지 않은 부분은 변수 타입의 기본값이 설정되게 됩니다.
a := [5]int{1, 2}
// [1 2 0 0 0]
다음과 같이 특정 위치에만 초기값을 설정할 수도 있습니다.
a := [5]int{1: 10, 3: 30}
// [0 10 0 30 0]
다음과 같이 초기값을 선언하면 길이가 초기값의 크기와 동일한 배열이 생성됩니다.
a := [...]int{1, 2, 3, 4, 5}
// [5]int
// [1 2 3 4 5]
다음과 같이 사용한 경우, 길이가 고정되지 않은 slice
가 생성되게 됩니다. (배열이 아님)
a := []int{1, 2, 3, 4, 5}
// []int
// [1 2 3 4 5]
이를 확인하기 위해 main.go
파일을 다음과 같이 수정합니다.
package main
import "fmt"
func main() {
var a [5]int = [5]int{1, 2, 3, 4, 5}
fmt.Println(a)
var b = [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
days := [3]string{"Mon", "Tue", "Wed"}
fmt.Println(days)
e := [5]int{1, 2}
fmt.Println(e)
f := [5]int{1: 10, 3: 30}
fmt.Println(f)
g := [...]int{1, 2, 3, 4, 5}
fmt.Printf("%T\n", g)
fmt.Println(g)
h := []int{1, 2, 3, 4, 5}
fmt.Printf("%T\n", h)
fmt.Println(h)
}
이를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
[1 2 3 4 5]
[1 2 3 4 5]
[Mon Tue Wed]
[1 2 0 0 0]
[0 10 0 30 0]
[5]int
[1 2 3 4 5]
[]int
[1 2 3 4 5]
배열 복사
배열은 일반 변수를 복사하는 것과는 다릅니다.
a := [...]int{1, 2, 3, 4, 5}
b := [...]int{10, 20, 30, 40, 50}
fmt.Println(a)
fmt.Println(b)
b = a
fmt.Println(a)
fmt.Println(b)
위에 예제를 살펴보면 다음과 같은 코드를 통해 배열을 복사합니다.
b = a
배열 복사는 a
의 메모리 크기만큼을 b
에 복사하게 됩니다. 배열은 연속된 메모리에 데이터가 저장되므로 a
를 b
에 복사할 때, 값 하나하나를 복사하는 것이 아니라 메모리를 통째로 복사하게 됩니다.
따라서 배열의 크기가 다르면 복사를 할 수 없습니다. Golang은 기본적으로 양변의 타입이 같아야 복사가 가능합니다. 따라서 다음과 같이 [3]int
타입의 배열을 [5]int
배열에 복사할 수 없습니다.
c := [3]int{1, 2, 3}
d := [5]int{10, 20, 30, 40, 50}
// ERROR
d = c
fmt.Println(c)
fmt.Println(d)
다차원 배열
Golang에서도 다차원 배열을 사용할 수 있습니다.
var a [2][5]int
기본 배열 사용법과 동일하게, 배열을 선언하면서 초기값을 설정할 수 있습니다.
package main
import "fmt"
func main() {
a := [2][5]int{
{1, 2, 3, 4, 5},
{10, 20, 30, 40, 50},
}
for _, arr := range a {
for _, v := range arr {
fmt.Print(v, " ")
}
fmt.Println()
}
}
위에 내용을 실행해 보면 다음과 같은 결과를 얻을 수 있습니다.
# go run main.go
1 2 3 4 5
10 20 30 40 50
완료
이것으로 Golang에서 배열을 정의하고 사용하는 방법에 대해서 살펴보았습니다. 또한, 배열을 복사하기 위해서는 동일한 타입과 크기의 배열을 사용해야 된다는 점에 대해서도 알게 되었습니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.