Doodly IT
[Go 묘공단 스터디]배열 본문
1) 배열이란?
배열은 같은 타입의 데이터 들로 이루어진 타입이다. 배열을 이루는 각 값은 요소라고 하고 요소를 가리키는 위치값을 인덱스(index)라고 한다.
2) 배열 변수의 선언과 초기화
배열의 선언은 변수를 선언하는 것과 크게 다르지 않다.
var arr [3]int64;
배열을 초기화하는 것은 아래와 같다.
var arr [3]int64 = [3]int64{1,2,3}
근데 코드를 막상 쓰니까 배열을 선언하고 초기화를 안해도 쓰지않으면 빌드가 되지않는다.
변수와 패키지와 마찬가지로 배열 또한 선언과 초기화 다음에 해당 배열을 참조해야만 빌드가 이뤄진다.
package main
import "fmt"
func main() {
//배열 선언
var arr [3]int64
//배열 초기화
arr = [3]int64{1, 2, 3}
for i := 0; i < 3; i++ {
fmt.Println(arr[i])
}
}
- int형 배열 선언과 초기화
var arr [5]int64 = [5]int64{1,2,3,4,5}
- string형 배열 선언과 초기화
var arr [5]string = [5]string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}
- float형 배열 선언과 초기화
var s [5]float64 = [5]float64{1.1, 2.2, 3.3 , 4.4, 5.5}
- 인덱스와 배열의 요소값을 동시에 설정하기
배열을 전체 초기화를 할 필요없이 인덱스 값으로 특정 요소(Element)만 설정할 수 있다.
초기화되지 않은 변수들은 모두 해당 값의 기본값으로 초기화가 된다.
(int형 타입의 기본값은 0이다.)
var s = [5]int{1:10, 3:30}
- 요소의 갯수를 생략하고 배열을 초기화 하기
요소의 갯수를 정확히 설정하지 않고 ...를 써서 배열을 선언하고 초기화할 수 있다.
x := [...]int{10,20,30}
이 때 배열 x의 요소갯수는 3으로 초기화가 된다.
3) 배열의 갯수는 항상 상수여야한다.
package main
import "fmt"
func main() {
x := 5
var arr [x]int64 = [x]int64{1, 2, 3, 4, 5}
for i := 0; i < 5; i++ {
fmt.Println(arr[i])
}
}
만약 위와 같이 배열의 길이를 변수로 설정한다면 아래와 같이 에러 메세지가 나온다.
여기서 배열의 길이를 고정적으로 설정하기 위해 x를 상수로 선언 하면 된다.
package main
import "fmt"
const x int = 5
func main() {
var arr [x]int64 = [x]int64{1, 2, 3, 4, 5}
for i := 0; i < 5; i++ {
fmt.Println(arr[i])
}
}
4) range 키워드
for문에서 range키워드를 통해 배열 요소를 순회할 수 있다. 배열의 길이만큼 for문이 반복된다.
package main
import "fmt"
const x int = 5
func main() {
var arr [x]int64 = [x]int64{10, 11, 12, 13, 14}
for i, v := range arr {
fmt.Println(i, v)
}
}
5) 배열은 연속된 메모리
배열을 선언하면 컴퓨터는 연속된 메모리 공간을 확보한다.
var a [10]int32
int32는 4byte이므로 연속된 40바이트를 할당한다.
요소의 물리적인 위치는 요소 위치 = 배열 시작주소 + (인덱스 x 타입크기) 가 된다.
6) 배열 복사
배열 복사는 복사하고자 하는 배열간의 데이터 타입과 크기가 같아야한다.
package main
import "fmt"
const x int = 5
const y int = 5
func main() {
var arr1 [x]int64 = [x]int64{10, 11, 12, 13, 14}
var arr2 [y]int64 = [y]int64{1, 2, 3, 4, 5}
arr2 = arr1
for i, v := range arr2 {
fmt.Println(i, v)
}
}
만약 (1)배열의 크기가 다르다거나 (2)배열의 타입이 다르다면 컴파일이 되지않는다.
7) 다중 배열
배열을 여러개 구현하여 차원을 높일 수 있다. 예를 들어 단순 일직선 상의 배열에서 각 요소마다 또 일직선의 배열을 선언한다면 2차원 배열을 구현할 수 있다.
arr := [2][5]int64{
{1,2,3,4,5},
{6,7,8,9,10},
}
'프로그래밍 > Go' 카테고리의 다른 글
[Go 묘공단 스터디] 포인터 (0) | 2023.11.15 |
---|---|
[Go 묘공단 스터디] 구조체 (0) | 2023.11.15 |
[Go 묘공단 스터디] for문 (0) | 2023.11.15 |
[Go 묘공단 스터디] Switch문 (0) | 2023.11.14 |
[Go 묘공단 스터디] 조건문 (0) | 2023.11.08 |