언어 자료구조 알고리즘/구글 Go

[구글 Go 하자] 31. 동적 배열, 슬라이스 기초

언제나휴일 2016. 12. 17. 05:21
반응형

[구글 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


관련 게시글

[구글 Go 하자] 32. 슬라이스에 append 함수로 순차 보관

[구글 Go 하자] 33. 슬라이스가 꽉 찰 때 append 함수를 사용하면 알아서 늘려줘요.

[구글 Go 하자] 34.슬라이스도 초기 값을 설정할 수 있어요.

[구글 Go 하자] 35. 배열의 대입 연산은 값 복사, 슬라이스는 참조

[구글 Go 하자] 36. copy 함수를 사용하면 원소 값을 복사할 수 있어요.

[구글 Go 하자] 37. 슬라이스[start:last]로 부분 슬라이스를 만들 수 있어요.


반응형