
์์
์ฌ๋ผ์ด์ค๋ Go์์ ๊ฐ๋ณ๊ธธ์ด ๋ฐฐ์ด์
๋๋ค. ๊ณ ์ ๊ธธ์ด ๋ฐฐ์ด์ var arr [10]int ์ด์ง๋ง ์ฌ๋ผ์ด์ค๋ var slice []int์
๋๋ค.
์ด๊ธฐ ์ฌ๋ผ์ด์ค๋ ๋น ๋ฐฐ์ด์
๋๋ค.
package main
import "fmt"
func main() {
var slice []int
if len(slice) == 0 { // โถ slice ๊ธธ์ด๊ฐ 0์ธ์ง ํ์ธ
fmt.Println("slice is empty", slice)
}
slice[1] = 10 // โท ์๋ฌ ๋ฐ์
fmt.Println(slice)
}
์ด๊ธฐํ
[] ์ด์ฉ
var slice1 = []int{1, 2, 3}
var slice2 = []int{1, 5:2, 10:3} // [1 0 0 0 0 2 0 0 0 0 3] //์ธ๋ฑ์ค 5๋ 2, 10์ 3
make() ์ด์ฉ
var slice = make([]int, 3)
์์ ์ถ๊ฐ
//ch18/ex18.3/ex18.3.go
package main
import "fmt"
func main() {
var slice []int
for i := 1; i <= 10; i++ { // โถ ์์๋ฅผ ํ๋์ฉ ์ถ๊ฐ
slice = append(slice, i)
}
slice = append(slice, 11, 12, 13, 14, 15) // โท ํ ๋ฒ์ ์ฌ๋ฌ ์์ ์ถ๊ฐ
fmt.Println(slice)
}
์ฌ๋ผ์ด์ค ๋ด๋ถ ๊ตฌ์กฐ
- ptr (*Elem): ๋ฐฐ์ด ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋๋ค.
- len (int): ์ฌ๋ผ์ด์ค์ ํ์ฌ ๊ธธ์ด, len() ํจ์๋ก ํ์ธํ ์ ์์ต๋๋ค.
- cap (int): ์ฌ๋ผ์ด์ค์ ์ต๋ ์ฉ๋, cap() ํจ์๋ก ํ์ธํ ์ ์์ต๋๋ค.

Golang ์ฌ๋ผ์ด์ค๋ฅผ ์กฐ์ํ ๋ (์: ์์ ์ถ๊ฐ, ์ ๊ฑฐ), Go ๋ฐํ์์ ์ด ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ฉ๋์ ์ด๊ณผํ๋ฉด ์๋ก์ด ๋ฐฐ์ด์ด ํ ๋น๋๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณต์ฌ๋ฉ๋๋ค. ์ค์ Go ์ฝ๋์์๋ ์ด ๋ด๋ถ ๊ตฌ์กฐ์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ฌ๋ผ์ด์ค ์กฐ์์ ์ธ์ด์์ ์ ๊ณตํ๋ ๋ด์ฅ ํจ์์ ๋ฌธ๋ฒ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.

๋ฐฐ์ด๊ณผ์ ์ฐจ์ด
package main
import "fmt"
func changeArray(array2 [5]int) { // โถ ๋ฐฐ์ด์ ๋ฐ์์ ์ธ ๋ฒ์งธ ๊ฐ ๋ณ๊ฒฝ
array2[2] = 200
}
func changeSlice(slice2 []int) { // โท ์ฌ๋ผ์ด์ค๋ฅผ ๋ฐ์์ ์ธ ๋ฒ์งธ ๊ฐ ๋ณ๊ฒฝ
slice2[2] = 200
}
func main() {
array := [5]int{1, 2, 3, 4, 5}
slice := []int{1, 2, 3, 4, 5}
changeArray(array)
changeSlice(slice)
fmt.Println("array:", array)
fmt.Println("slice:", slice)
}
// array: [1 2 3 4 5]
// slice: [1 2 200 4 5]
Go ์ธ์ด์์๋ ๋ชจ๋ ๊ฐ์ ๋์ ์ ๋ณต์ฌ์ ๋๋ค. ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ ๋๋ ๋ค๋ฅธ ๋ณ์ ๋์ ํ ๋ ๊ฐ์ ์ด๋์ ๋ณต์ฌ์ ๋๋ค. ์ฌ๋ผ์ด์ค๋ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์ ๋ณต์ฌ๋ ์ฌ๋ผ์ด์ค๋ ๊ฐ์ ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
append์ ์ฃผ์์ฌํญ
package main
import "fmt"
func main() {
slice1 := make([]int, 3, 5) // โถ len:3 cap:5 ์ฌ๋ผ์ด์ค๋ฅผ ๋ง๋ญ๋๋ค
slice2 := append(slice1, 4, 5)
// cap() ํจ์๋ฅผ ์ด์ฉํด ์ฌ๋ผ์ด์ค capacity ๊ฐ์ ์ ์ ์์ต๋๋ค.
fmt.Println("slice1:", slice1, len(slice1), cap(slice1))
fmt.Println("slice2:", slice2, len(slice2), cap(slice2))
slice1[1] = 100 // โท slice2๊น์ง ๋ฐ๋๋๋ค.
fmt.Println("After change second element")
fmt.Println("slice1:", slice1, len(slice1), cap(slice1))
fmt.Println("slice2:", slice2, len(slice2), cap(slice2))
slice1 = append(slice1, 500) // โธ ์ญ์ slice2๊น์ง ๋ฐ๋๋๋ค.
fmt.Println("After append 500")
fmt.Println("slice1:", slice1, len(slice1), cap(slice1))
fmt.Println("slice2:", slice2, len(slice2), cap(slice2))
}
/*
slice1: [0 0 0] 3 5
slice2: [0 0 0 4 5] 5 5
After change second element
slice1: [0 100 0] 3 5
slice2: [0 100 0 4 5] 5 5
After append 500
slice1: [0 100 0 500] 4 5
slice2: [0 100 0 500 5] 5 5
*/
appendํจ์์ ๊ฒฐ๊ณผ๋ ์๋ก์ด ์ฌ๋ผ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค. slice1์ appendํจ์๋ฅผ ์ ์ฉ์์ผ ์๋ก์ด slice2๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด, slice1๊ณผ slice2๊ฐ ๋ชจ๋ ๊ฐ์ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ ์ ํ์์ด ์ผ์ด๋ฉ๋๋ค.
๋ง์ฝ ์ ์์ ์์ len 3, cap 3์ธ slice1์ผ๋ก ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
package main
import "fmt"
func main() {
slice1 := []int{1, 2, 3} // โถ len:3 cap:3 ์ฌ๋ผ์ด์ค ์์ฑ
slice2 := append(slice1, 4, 5) // โท append() ํจ์๋ก ์์ ์ถ๊ฐ
fmt.Println("slice1:", slice1, len(slice1), cap(slice1))
fmt.Println("slice2:", slice2, len(slice2), cap(slice2))
slice1[1] = 100 // โธ slice1 ์์๊ฐ ๋ณ๊ฒฝ
fmt.Println("After change second element")
fmt.Println("slice:", slice1, len(slice1), cap(slice1))
fmt.Println("slice2:", slice2, len(slice2), cap(slice2))
slice1 = append(slice1, 500) // โ slice1 ์์๊ฐ ๋ณ๊ฒฝ
fmt.Println("After append 500")
fmt.Println("slice1:", slice1, len(slice1), cap(slice1))
fmt.Println("slice2:", slice2, len(slice2), cap(slice2))
}
/*
slice1: [1 2 3] 3 3
slice2: [1 2 3 4 5] 5 6
After change second element
slice: [1 100 3] 3 3
slice2: [1 2 3 4 5] 5 6
After append 500
slice1: [1 100 3 500] 4 6
slice2: [1 2 3 4 5] 5 6
*/
appendํ ๋ ๋น ๊ณต๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ ๊ธธ์ด 6๊ฐ์ง๋ฆฌ(cap:3 * 2) ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ ๋ค slice1 ๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ ๋ณต์ฌํ๊ณ ๋งจ ๋ค์ 4, 5๋ฅผ ์ถ๊ฐํด์ len: 5, cap: 6 ์ฌ๋ผ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ฌ๋ผ์ด์ค๋ฅผ ๋์ ํ slice2์ slice1๊ณผ ๋ค๋ฅธ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก append()๋ ์ฌ๋ผ์ด์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐฐ์ด์ ๋น ๊ณต๊ฐ์ด ์ถฉ๋ถํ๋ค๋ฉด ์ถ๊ฐํ๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ ํฐ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด์ ์ถ๊ฐํ๋ค๋ ์ ์ ๊ธฐ์ตํด์ผํฉ๋๋ค. ์ด ๋ถ๋ถ์ ์ ์ธ์งํด์ ์๊ธฐ์น ๋ชปํ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
์ฌ๋ผ์ด์ค ๋ณต์
make๋ก ์๋ก์ด ์ฌ๋ผ์ด์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ ๋๋ค.
package main
import "fmt"
func main() {
slice1 := []int{1, 2, 3, 4, 5}
slice2 := make([]int, len(slice1)) // โถ slice1๊ณผ ๊ฐ์ ๊ธธ์ด์ ์ฌ๋ผ์ด์ค ์์ฑ
for i, v := range slice1 { // โท slice1์ ๋ชจ๋ ์์๊ฐ ๋ณต์ฌ
slice2[i] = v
}
slice1[1] = 100 // โธ slice1 ์์๊ฐ ๋ณ๊ฒฝ
fmt.Println(slice1)
fmt.Println(slice2)
}
/*
[1 100 3 4 5]
[1 2 3 4 5]
*/
copy() ํจ์๋ฅผ ์ฌ์ฉํด๋ ๋ฉ๋๋ค. copy()๋ ํ๊ฒ ์ฌ๋ผ์ด์ค, ์๋ณธ ์ฌ๋ผ์ด์ค ์์๋๋ก ์ธ์๋ฅผ ๋ฃ๊ณ , ๋ณต์ฌ๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
package main
import "fmt"
func main() {
slice1 := []int{1, 2, 3, 4, 5}
slice2 := make([]int, 3, 10) // โถ len:3, cap:10 ์ฌ๋ผ์ด์ค
slice3 := make([]int, 10) // โท len:10, cap:10 ์ฌ๋ผ์ด์ค
cnt1 := copy(slice2, slice1) // โธ slice1์ slice2์ ๋ณต์ฌํฉ๋๋ค.
cnt2 := copy(slice3, slice1) // โน slice1์ slice3์ ๋ณต์ฌํฉ๋๋ค.
fmt.Println(cnt1, slice2)
fmt.Println(cnt2, slice3)
}
/*
3 [1 2 3]
5 [1 2 3 4 5 0 0 0 0 0]
*/
slice2๋ len์ด 3์ด๊ธฐ ๋๋ฌธ์ 3๊ฐ๋ง ๋ณต์ฌ๋ฉ๋๋ค. copy()ํจ์๋ ๋ ์ฌ๋ผ์ด์ค์ ๊ธธ์ด ์ค ๋ ์์ ๊ฐ๋งํผ์ ์์๋ฅผ ๋ณต์ฌํฉ๋๋ค.
์ฐธ๊ณ
Turker์ Go ์ธ์ด ํ๋ก๊ทธ๋๋ฐ 18์ฅ ์ฌ๋ผ์ด์ค ๋ด์ฉ์ ๋๋ค.
'ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > Go' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Go] ํ์์ง์ ์ Format ์ ๋ฆฌ(%v,%s,%d ๋ฑ) (0) | 2025.11.07 |
|---|---|
| [Go] Map ์๋ฆฌ์ ํ์ฉ(feat. hash) (0) | 2025.11.05 |
| [Go] ๊ณ ๋ฃจํด(Goroutine) (0) | 2025.10.13 |
| [Go] Gin ํ๋ ์์ํฌ (1) | 2025.09.20 |
| [Go] ํจ์ ๊ณ ๊ธ(๊ฐ๋ณ ์ธ์, defer, ๋๋คํจ์, ํจ์ํ์ ๋ณ์) (0) | 2025.09.19 |
๋๊ธ