이 글은 Must Have Tucker의 Go 언어 프로그래밍 책을 참고하여 작성하였으며, 개인적인 학습 내용을 정리한 글입니다.
배열 이란?
배열은 타입이 같은 값 여러 개를 가지는 자료 구조 입니다.

위 이미지로 좀 더 자세히 설명을 드리자면,
- 배열을 이루는 각 값은 요소 라고 합니다.
- 또한 요소를 가리키는 위치 값을 인덱스 라고 합니다.
- 여기서 인덱스는 1부터 시작하는 것이 아닌 0부터 시작을 합니다.
배열을 사용하는 장점은 타입이 같은 여러 데이터를 변수 하나로 묶어서 효과적으로 다룰 수 있는 점 입니다.
배열 정의 방법
배열 정의 방법은 아래와 같습니다.
var 변수명 [요소 개수]타입
ex)
var t [5]float64위와 같은 방식으로 배열을 정의 합니다.
간단한 예제를 통해 사용법을 익혀보면,
package main
import (
"fmt"
)
func main() {
var t [5]float64 = [5]float64{98.1, 93.2, 77.3, 82.4, 83.5}
for i := 0; i < 5; i++ {
fmt.Println(t[i])
}
}
---
98.1
93.2
77.3
82.4
83.5배열 선언 시 개수는 항상 상수
말 그대로 배열 선언 시 개수는 항상 상수를 써야 합니다.
package main
const Y int = 3
func main() {
x := 5
a := [x]int{1, 2, 3, 4, 5}
b := [Y]int{1, 2, 3}
var c [10]int
}
---
non-constant array bound x이런 에러가 발생하는 이유는 변수로 선언된 x는 배열 개수로 사용할 수 없기 때문 입니다.
하지만 Y는 상수로 선언됐기 때문에 에러가 발생하지 않습니다.
또한 상수 10도 배열 개수로 지정할 수 있기 때문에 에러가 발생하지 않습니다.
배열 요소 읽고 쓰기
배열 요소에 접근하여 값을 읽고 쓰려면 배열 번호에 대괄호 []를 쓰고 그 사이에 접근하고자 하는 요소의 인덱스를 적습니다.
예시를 통해 알아보겠습니다.
package main
import "fmt"
func main() {
nums := [...]int{10, 20, 30, 40, 50}
nums[2] = 300 # 배열 요소 중 2번 인덱스의 값을 300으로 변경
for i := 0; i < len(nums); i++ {
fmt.Println(nums[i])
}
}
---
10
20
300
40
50결과를 보면
- 인덱스 0, 10
- 인덱스 1, 20
- 인덱스 2, 300
- 인덱스 3, 40
- 인덱스 4, 50
이렇게 할당이 되어 결과값이 나온 것을 알 수 있습니다.
range 순회
for 반복문에서 range 키워드를 이용하면 배열 요소를 순회할 수 있습니다.
예시를 통해 알아보겠습니다.
package main
import "fmt"
func main() {
var t [5]int = [5]int{10, 20, 30, 40, 50}
for i, v := range t {
fmt.Println(i, v)
}
}
---
0 10
1 20
2 30
3 40
4 50보면 배열의 각 요소를 순회하면서 인덱스와 요솟값 두 값을 반환하는 것을 볼 수 있습니다.
for i, v := range t {
fmt.Println(v)
}
for문에서 i 변수는 인덱스, v는 변수 요소 값 입니다.여기서 인덱스는 필요 없고 변수 요소 값만 필요하면 밑줄_ 을 사용해서 인덱스 를 무효화할 수 있습니다.
for _, v := range t {
fmt.Println(v)
}배열 복사
대입 연산자를 사용하면 배열 대 배열을 복사할 수 있습니다.
예제를 통해 알아보겠습니다.
//ch10/ex10.5/ex10.5.go
package main
import "fmt"
func main() {
a := [5]int{1, 2, 3, 4, 5}
b := [5]int{500, 400, 300, 200, 100}
for i, v := range a { // ❶ 배열 a 원소 출력
fmt.Printf("a[%d] = %d\n", i, v)
}
fmt.Println() // ❷ 개행
for i, v := range b { // ❸ 배열 b 원소 출력
fmt.Printf("b[%d] = %d\n", i, v)
}
b = a // ❹ a 배열을 b변수에 복사
fmt.Println() // 개행
for i, v := range b { // ➎ 배열 b 원소 출력
fmt.Printf("b[%d] = %d\n", i, v)
}
}
---
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5
b[0] = 500
b[1] = 400
b[2] = 300
b[3] = 200
b[4] = 100
b[0] = 1
b[1] = 2
b[2] = 3
b[3] = 4
b[4] = 5결과를 보면, 4번 b = a // ❹ a 배열을 b변수에 복사 해당 부분에서
좌변에 있는 배열 b 에 우변에 있는 배열 a 를 복사한 것을 알 수 있습니다.
이와 같이 좌변은 복사 받는 배열, 우변은 복사하는 배열 인 것을 알 수 있습니다.
다만 여기서 주의해야 할 점이, 두 배열 모두 같은 타입이여야 합니다.
예를 들어,
var a = [5]int{1, 2, 3, 4, 5}
var b = [5]float32{100, 200, 300, 400, 500}
b = a
---
이렇게 하면 배열 복사 과정에서 에러가 나옵니다.다중 배열
다중 배열은 중첩된 배열을 말합니다. 이중 배열, 삼중 배열 처럼 여러 번 중첩해서 사용할 수 있습니다.
간단하게, 다중 배열은 배열을 요소로 가지는 배열이라고 이해하면 쉽습니다.

위 이미지는 다중 배열을 보여주는 사진 입니다.
var b [2][6]int
즉 배열 b는 [6]int 배열이 2개가 있는 다중 배열이라고 이해하시면 됩니다.
따라서 다중 배열은 배열이 몇 개가 중첩됐든 [개수]타입 형태로 이해하시면 됩니다.
ex) var a [2][5][100][200]int
[개수]타입 형태로 이해한다는 뜻이 무슨 말이냐면,
1. 다중 배열 a는 [5][100][200]int 타입을 2개 가진 배열 입니다.
2. 다시 대중 배열 a는 [100][200]int 타입을 5개 가진 배열 입니다.
3. 다시 다중 배열 a는 [200]int 타입을 100개 가진 배열 입니다.
즉, a 는 2 * 5 * 100 * 200 크기를 가진 4차원(4중) 배열 입니다.
이런식으로 하나씩 배열을 풀어가면 됩니다.예시를 통해 다중 배열을 어떻게 사용하는 지 알아 보겠습니다.
//ch10/ex10.6/ex10.6.go
package main
import "fmt"
func main() {
a := [2][5]int{ // ❶ 이중 배열 선언
{1, 2, 3, 4, 5},
{5, 6, 7, 8, 9}, // ❷ 여러 줄에 걸쳐 초기화할 때는 쉼표를 찍자!
}
for _, arr := range a { // ❸ arr값은 순서대로 a[0]의 배열 a[1]의 배열
for _, v := range arr { // ❹ v값은 순서대로 a[0]과 a[1] 배열의 각 원소
fmt.Print(v, " ") // ➎ v값 출력
}
fmt.Println()
}
}
---
1 2 3 4 5
5 6 7 8 9 여기서 a는 배열 요소가 5개씩 들어가는 배열 2개를 가진 이중 배열 입니다.
따라서 위 코드에서 나온 것 처럼 이중 배열을 선언해주면 됩니다.
그리고 for 문을 보면, 첫번째 for문 보면, arr 는 range a 로부터 순서대로 a[0], a[1] 배열을 받고,
두번째 for문을 보면, a[0], a[1] 배열 안에 있는 배열 요소 값들을 차례로 보여줍니다.
이상 입니다.
감사합니다.
'개발 > Go' 카테고리의 다른 글
| [Go 언어 학습기 #7] Go 언어(Golang) 의 패키지 (0) | 2025.12.22 |
|---|---|
| [Go 언어 학습기 #6] Go 언어(Golang) 의 구조체 (0) | 2025.12.18 |
| [Go 언어 학습기 #4] Go 언어(Golang) 의 함수 (0) | 2025.12.02 |
| [Go 언어 학습기 #3] Go 언어(Golang) 의 변수가 갖는 속성과 사용법 알아보기 (0) | 2025.11.30 |
| [Go 언어 학습기 #2] Go 언어(Golang) 의 특징 및 동작 과정 (0) | 2025.11.27 |
