12. 배열

Winston Lee·2023년 11월 22일

Golang

목록 보기
6/12

12장 배열

12.1 배열

  • 배열은 같은 타입의 데이터로 이루어진 타입이다.
  • 배열을 이루는 각 값은 요소 라고 하고 요소를 가리키는 위치값을 인덱스라고 한다.

12.2 배열 사용법

12.2.1 배열 변수 선언 및 초기화

  • int type 요소를 5개 갖는 배열 nums를 할당한다.
    var nums [5]int
  • string 타입 요소 3개를 갖는 배열 days를 할당하고 초기화 한다.
    days := [3]string{"monday", "tuesday", ""}
 - index별로 요소값을 초기화 할 수 있다. 
```go
  nums := [5]int{1:10, 3:20}  
  • ...를 사용하여 배열의 요소개수를 생략 가능

12.2.2 배열 선언 시 개수는 항상 상수

const Y int = 3

func main() {
	x := 5
    a := [x]int{1,2,3,4,5} // Error: non-constant array bound x
    b := [Y]int{1,2,3,4,5}
    c := [10]int
}

12.2.3 배열 요소 읽고 쓰기

  • 배열 요소에 접근하여 값을 읽고 쓰려면 배열 변수에 대괄호를 쓰고 그 사이에 접근하고자 하는 요소의 인덱스를 적는다

 nums := [...]int{1:10, 3:20}
for i := 0; i < len(nums); i++ {
	fmt.Println(nums[i])
}

12.2.4 range 순회

  • for 반복문에서 range 키워드를 사용하면 배열 요소를 순회할 수 있다.
    go
    nums := [...]int{1:10, 3:20}
    for i, v := range nums { // i: index, v: value
    fmt.Println(i, v)
    }

12.3 배열은 연속된 메모리

  • 배열을 선언하면 컴퓨터는 연속된 메모리 공간을 확보한다.
  • go var a [10]int32를 선언하면 int32값 10개를 저장할 수 있는 연속된 메모리 공간을 찾아 할당한다.(int32 타입은 4바이트이므로 연속된 40바이트를 할당)
  • 컴퓨터는 인덱스에 해당하는 요소를 찾아갈때, 배열의 시작주소에 인덱스와 타입크기를 곱한 값을 더해 찾아간다.

12.3.1 배열 복사

  • 대입 연산자를 사용하면 배열 대 배열 복사를 할 수 있다.

    func Test_arrayCopy(t *testing.T) {
    	a := [5]int{1, 2, 3, 4, 5}
    	b := [5]int{500, 400, 300, 200, 100}
    
    	for i, v := range a {
    		fmt.Printf("a[%d] = %d\n", i, v)
    	}
    
    	for i, v := range b {
    		fmt.Printf("a[%d] = %d\n", i, v)
    	}
    
    	b = a
    	for i, v := range b {
    		fmt.Printf("a[%d] = %d\n", i, v)
    	}
    }



- 배열의 복사 또한 타입과 크기가 같아야 한다.




### 12.4 다중 배열


 - 다중 배열은 중첩된 배열을 말한다.
 - 이중배열은 이차원 배열이라 부르고, 삼중 배열은 삼차원 배열이라고 부름
 - 컴퓨터는 차원 형태로 데이터를 저장하지 않고 전체 요소 개수만큼 연속된 메모리 형태로 저장한다.
 - 다중 배열 선언은 아래와 같다.
   ```go 
 func Test_arrayCopy(t *testing.T) {
	a := [5]int{1, 2, 3, 4, 5}
	b := [5]int{500, 400, 300, 200, 100}

	for i, v := range a {
		fmt.Printf("a[%d] = %d\n", i, v)
	}

	for i, v := range b {
		fmt.Printf("a[%d] = %d\n", i, v)
	}

	b = a
	for i, v := range b {
		fmt.Printf("a[%d] = %d\n", i, v)
	}
}
profile
인프라 엔지니어

0개의 댓글