Doodly IT

[Go 묘공단 스터디]배열 본문

프로그래밍/Go

[Go 묘공단 스터디]배열

DoodlyKim 2023. 11. 15. 19:10

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