Programming Language/go

Go 언어 프로그래밍 - 조건문과 반복문 (배열)

김크리 2021. 7. 12. 19:42

배열(Array)

  • 배열은 같은 타입의 데이터들로 이루어진 타입이다.
  • 컴퓨터에서 배열은 항상 0부터 시작한다.
  • 배열은 자료구조(data structure) 중 하나이다.
  • 자료구조는 데이터를 어떤 형태로 저장할지 나타내는 구조를 말한다.
  • 배열은 연속된 메모리이다. 
    • 변수의 타입은 메모리의 크기를 나타낸다.
    • 배열은 사이즈 * 변수 타입 메모리크기 만큼 메모리를 할당받는다.
    • 이렇게 한번에 메모리를 할당받는 것을 chunk 라고한다.

알고리즘 기본기 다지기2.기초 데이터구조 (배열, 연결리스트)

배열 변수 선언

package main

import "fmt"

func main() {
	//배열 초기값 선언
	var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2}

	//배열의 인덱스는 0부터 시작한다.
	//이를 이용하여 인덱스로 배열의 모든 값을 확인하는 반복문이다.
	for i := 0; i < 5; i++ {
		fmt.Println(t[i])
	}
}

다양한 배열 변수 선언

배열 선언시 개수는 항상 상수이다.

배열은 고정된 길이를 갖는다.

//다양한 배열 변수 선언
func defineArray() {
	//0 0 0 0 0
	var nums [5]int

	//초기값 선언
	days := [3]string{"monday", "tuesday", "wednesday"}

	//24.3 26.7 0 0 0
	var temps [5]float64 = [5]float64{24.3, 26.7}

	//특정 인덱스에 값을 선언
	//0 10 0 30 0
	var s = [5]int{1: 10, 3: 30}

	//[...]은 선언된 초깃값의 갯수가 배열의 길이가 된다
	// FOCUS. []int{10,20,30}과 동일하지 않다.
	//[]int{10,20,30} 은  SLICE로 동적 배열이며 길이가 변할 수 있다.
	x := [...]int{10, 20, 30}
}

배열 순회

내장함수 len()을 사용하여 길이만큼 순회를 할 수 있다. 혹은 range라는 키워드를 사용하여 해당 값을 순회할 수 있다.

package main

import "fmt"

func main() {
	nums := [...]int{10, 20, 30, 40, 50} // = [5]int{10,20,30,40,50}
	nums[2] = 300

	//len()은 배열의 길이를 반환하는 내장함수이다.
	for i := 0; i < len(nums); i++ {
		fmt.Println(nums[i])
	}
    
    var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2}

	//range(범위)는 키워드 이다.
	//range 뒤에는 자료구조/타입이 올 수 있다.
	//range 뒤에 오는 자료구조 요소를 순회한다.
	//배열의 경우, 인덱스와 값으로 이루어진 자료구조이다.
	//range 뒤에 배열이 오면 인덱스와 값을 반환하게된다.
	for i, v := range t {
		fmt.Println(i, v)
	}
}

배열 복사

출발지, 도착지 배열의 크기, 타입이 전부 동일해야 복사가 가능하다.

package main

import "fmt"

func main() {
	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)
	}
	fmt.Println()
	for i, v := range b {
		fmt.Printf("b[%d] = %d\n", i, v)
	}
	//1. a의 값을 복사한다.(5 * 8bytes = 40 bytes)
	//2. 그대로 복사한 값을 b의 값에 넣는다.
	//3. a와 b의 값이 동일하지 않다면 복사를 할 수 없다.
	//공간 크기가 같아야 복사가 가능하다.
	b = a
	fmt.Println()
	for i, v := range b {
		fmt.Printf("b[%d] = %d\n", i, v)
	}
}

다중 배열

var b[2][5] int

var c[2][100][333][...]int

여러 차원의 배열이 선언될 수 있다.

package main

import "fmt"

func main() {
	a := [2][5]int{
    	{1, 2, 3, 4, 5},
		{5, 6, 7, 8, 9},
    }
	for _, arr := range a {
		for _, v := range arr {
			fmt.Print(v, " ")
		}
		fmt.Println()
	}
}

 

 

참고

Tucker의 Go언어 프로그래밍 - Go가 온당 12장

https://www.youtube.com/c/TuckerProgramming/videos