[Go 언어] 31. 동적 배열, 슬라이스 기초

안녕하세요. 언제나 휴일, 언휴예요.

Go언어에서는 배열 크기를 동적으로 늘어나는 슬라이스를 제공하고 있어요. 슬라이스 형식을 선언할 때는 var 키워드와 슬라이스 이름[] 원소 형식을 명시하세요.

var name[]type

배열 선언과 비슷하지만 원소 개수를 명시하지 않는다는 부분이 다르죠. 그리고 슬라이스에 저장소를 할당할 때는 make 함수에 인자료 []원소 형식과 원소 개수와 저장소 용량를 전달합니다.

var name[] type = make([]type, elements no, capacity size)

이 때 저장소의 용량은 생략할 수 있어요. 주의할 점은 슬라이스의 원소에 접근할 때는 원소 개수만큼만 접근할 수 있다는 것이죠. 저장소의 용량이 원소 개수보다 클 때 원소 개수를 제외한 나머지 부분에 접근하면 런타임 오류가 발생해요. 물론 인덱스는 0부터 시작하죠.

다음은 슬라이스를 make 함수로 생성하여 사용하는 예제입니다. 관리할 학생 수를 입력 받은 후에 1번부터 순차적으로 성적을 입력받은 후에 입력받은 결과와 총점을 출력하는 코드예요.

// 슬라이스 make 함수 사용
package main

import "fmt"

func main() {
    var n int
    fmt.Print("학생수:")
    fmt.Scanln(&n)

    var scores []int = make([]int, n)
    var i int

    for i = 0; i < n; i++ {
        fmt.Printf("%d 번 성적:", i+1)
        fmt.Scanln(&scores[i])
    }

    fmt.Println("==== 학생 성적 출력 ====")

    var sum int
    for i = 0; i < n; i++ {
        sum += scores[i]
        fmt.Printf("%d번 성적:%d\n", i+1, sum)
    }
    fmt.Printf("총점:%d\n", sum)

}

실행 결과는 다음과 같습니다.

학생수:4
1 번 성적:90
2 번 성적:78
3 번 성적:85
4 번 성적:92
==== 학생 성적 출력 ====
1번 성적:90
2번 성적:168
3번 성적:253
4번 성적:345
총점:345