배열

배열은 연속된 메모리에 저장된 자료구조로 다른 자료구조 중 Random Access가 가장빠르고 고정된 길이의 자료구조이다. 배열과 비슷한 자료구조로 go에는 slice가 존재하는데 slice는 동적인 길이의 배열과 같다.

선언 방식

func main(){
  var a [5]int
}

배열은 고정된 size의 자료구조이기 때문에 변수를 선언하는 방식에서 타입을 []를 이용해서 size를 선언해주면 된다. 배열안의 값들의 기본값은 제로값(zero value)로 할당된다.

a := [5]int{1,2,3,4,5}
b := [5]int{1,2,3}

for _,v := range a{
  fmt.Print(v," ") //1,2,3,4,5
}

for _,v := range b{
  fmt.Print(v," ") //1,2,3,0,0
}

배열을 선언하면서 바로 초기화를 하고 싶은 경우에는 :=를 이용해서 위와 같이 선언과 초기화를 동시에 할 수 있으며 초기화를 하지 않은 메모리에는 zero value가 들어간다.



배열의 사용법

a := [5]int{1,2,3,4,5}

fmt.Print(a[1]) //2
a[1] = 0;
fmt.Print(a[1]) //0

다른 언어의 배열 사용법과 같이 변수뒤에 []를 이용하여 특정 index메모리에 접근을 할 수 있으며 조회,수정,삽입이 가능하다.



배열의 메모리 크기

1차원 배열,2차원 배열, 그 이상의 배열이더라도 총 선언된 길이 * 자료형 메모리 크기의 메모리 size를 갖는다.

예를 들어 a := [5]int라면 int가 32bit(4byte)이므로 4byte _ 5의 메모리 size만큼을 갖으며, b := [2][5]int라면 4byte _ 2 * 5 만큼의 size를 갖는다.




Reference

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트