오늘 한 일

  • 오늘은 지난 주에 이어 Go를 더 봤다.
  • 별 문제 없이 잘 흘러가고 있다 싶을 때, 슬라이스를 만났고.. 처음에는 이해가 좀 된다 싶었다. 이 링크를 만나기 전까지는.
  • (이건 나 혼자만 이해할 수 있는 끄적임..ㅠㅠ) 슬라이스의 length와 capacity가 어떻게 다른지, 무슨 차이가 있는지도 알겠고, append 할 때 append 하려는 요소의 개수가 슬라이스의 capacity를 초과하는 경우 capacity가 기존의 2배로 늘어난다는 것도 알겠다. 그런데 length = 0, capacity = 0 인 슬라이스에 0, 1, 2, 3, 4를 append 하면 왜 갑자기 length = 5, capacity = 6이 되냐고.. 0, 1, 2, 3을 append 할 때까지는 length와 capacity가 같은데. 마침 허들을 걸어주신 Kei님께 여쭤봤더니, 메모리 단편화를 지양하고 메모리 최적화를 달성하기 위한 Go만의 방법이 작용한 결과일 것이라는 답변을 받았다. 그리고 지금 당장 깊게 파고들어야 하는 문제도 아닌 것. 그래서 여기다 keep 하고 넘어간다 ㅠ.ㅠ 날코딩이긴 한데 미래의 나에게 맡긴다 흑흑.. 애초에 궁금했던 건 아래 코드 중 2번 케이스에 해당한다(capacity가 1 -> 2 -> 3 -> 4 -> 6 -> 8 순서로 늘어난다). 1번은 2번처럼 날코딩이 아닌 방식으로 해보려고 배열의 배열을 생성해서 시작했더니 capacity가 1 -> 2 -> 4 -> 8 순서로 늘어난다. 미래의 내가 다시 돌아왔을 때 '얘는 뭐 이런 쉬운 걸 고민해ㅋㅋ'라고 했으면 좋겠다. 제발
// https://go-tour-ko.appspot.com/moretypes/15
// https://go.dev/play/p/OKtCFskbp2t

package main

import "fmt"

func main() {

	fmt.Println("##### 1번 케이스 #####")

	var array [8][]int
	for i := 0; i < 8; i++ {
		for j := 0; j <= i; j++ {
			array[i] = append(array[i], j)
		}
		printSlice(array[i])
	}

	/*
	len=1 cap=1 [0]
	len=2 cap=2 [0 1]
	len=3 cap=4 [0 1 2]
	len=4 cap=4 [0 1 2 3]
	len=5 cap=8 [0 1 2 3 4]
	len=6 cap=8 [0 1 2 3 4 5]
	len=7 cap=8 [0 1 2 3 4 5 6]
	len=8 cap=8 [0 1 2 3 4 5 6 7]
	*/

	fmt.Println("##### 2번 케이스 #####")
	var a, b, c, d, e, f, g, h []int

	a = append(a, 0)
	printSlice(a)
	
	b = append(b, 0, 1)
	printSlice(b)

	c = append(c, 0, 1, 2)
	printSlice(c)

	d = append(d, 0, 1, 2, 3)
	printSlice(d)

	e = append(e, 0, 1, 2, 3, 4)
	printSlice(e)

	f = append(f, 0, 1, 2, 3, 4, 5)
	printSlice(f)

	g = append(g, 0, 1, 2, 3, 4, 5, 6)
	printSlice(g)

	h = append(h, 0, 1, 2, 3, 4, 5, 6, 7)
	printSlice(h)

	/*
	len=1 cap=1 [0]
	len=2 cap=2 [0 1]
	len=3 cap=3 [0 1 2]
	len=4 cap=4 [0 1 2 3]
	len=5 cap=6 [0 1 2 3 4]
	len=6 cap=6 [0 1 2 3 4 5]
	len=7 cap=8 [0 1 2 3 4 5 6]
	len=8 cap=8 [0 1 2 3 4 5 6 7]
	*/
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
  • Kei님의 제안으로 태초마을 주민이 되었다. 나도 이제 포켓몬 트레이너...!? 이것과 관련해서 내일 미팅부터 시작해서 뭔가 펼쳐질 것 같은데 재밌을 것 같아 기대도 되고, 내가 뭐라도 할 수 있을까 싶어 걱정도 된다.
  • 전화영어 신청했다! 영어 공부도 할 거야, 이제.. 나만 영어 못할 수 없어ㅠㅠ

오늘 배운 것

  • 궁금한 게 있으면 바로 질문하고, 이걸 지금 계속 고민할 필요가 있는 것인지 짚고 넘어가도록 하자.

+ Recent posts