🔥 make로 슬라이스 생성하기
Go 언어에서는 내장 함수 make를 사용하여 슬라이스를 생성할 수 있어요. 이 방법을 통해 동적 크기의 배열을 만들 수 있답니다.
make 함수는 지정된 타입, 길이, 그리고 선택적으로 용량을 인자로 받아 해당 타입의 초기화된 슬라이스를 반환해요. 함수 시그니처는 다음과 같아요:
func make([]T, len, cap) []T
func make([]T, len, cap) []T
T는 슬라이스의 원소 타입을 나타내요.len은 슬라이스의 길이를 지정해요.cap은 선택적으로 슬라이스의 용량을 지정할 수 있어요. 생략하면 길이와 같은 값으로 설정돼요.
make 함수는 주어진 길이와 용량을 가진 배열을 생성하고, 배열의 모든 원소를 해당 타입의 제로값으로 초기화해요. 그리고 그 배열을 가리키는 슬라이스를 반환하죠.
예를 들어, 다음 코드는 make를 사용하여 길이가 5이고 정수형 원소를 갖는 슬라이스 a를 생성해요:
a := make([]int, 5) // len(a)는 5, cap(a)도 5
a := make([]int, 5) // len(a)는 5, cap(a)도 5
위 코드에서 make 함수는 정수형 슬라이스 a를 생성하고, 그 길이를 5로 설정하죠.
슬라이스의 용량(capacity)을 지정하고 싶다면, make 함수에 세 번째 인자를 전달하면 돼요:
b := make([]int, 0, 5) // len(b)는 0, cap(b)는 5
b = b[:cap(b)] // len(b)는 5, cap(b)는 5가 됨
b = b[1:] // len(b)는 4, cap(b)는 4가 됨
b := make([]int, 0, 5) // len(b)는 0, cap(b)는 5
b = b[:cap(b)] // len(b)는 5, cap(b)는 5가 됨
b = b[1:] // len(b)는 4, cap(b)는 4가 됨
위 코드에서는 길이가 0이고 용량이 5인 정수형 슬라이스 b를 생성했어요. 그리고 슬라이싱 연산을 통해 b의 길이와 용량을 조절하는 모습을 볼 수 있죠.
이제 좀 더 복잡한 예제를 살펴볼까요?
package main
import "fmt"
func main() {
// 길이와 용량이 5인 정수형 슬라이스 a 생성
a := make([]int, 5)
printSlice("a", a)
// 길이는 0, 용량은 5인 정수형 슬라이스 b 생성
b := make([]int, 0, 5)
printSlice("b", b)
// b의 첫 번째 요소부터 2개 요소를 가져와 c 생성
c := b[:2]
printSlice("c", c)
// c의 세 번째 요소부터 마지막 요소까지 가져와 d 생성
d := c[2:5]
printSlice("d", d)
}
// 슬라이스의 길이, 용량, 내용을 출력하는 함수
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
package main
import "fmt"
func main() {
// 길이와 용량이 5인 정수형 슬라이스 a 생성
a := make([]int, 5)
printSlice("a", a)
// 길이는 0, 용량은 5인 정수형 슬라이스 b 생성
b := make([]int, 0, 5)
printSlice("b", b)
// b의 첫 번째 요소부터 2개 요소를 가져와 c 생성
c := b[:2]
printSlice("c", c)
// c의 세 번째 요소부터 마지막 요소까지 가져와 d 생성
d := c[2:5]
printSlice("d", d)
}
// 슬라이스의 길이, 용량, 내용을 출력하는 함수
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
위 예제는 make를 사용하여 다양한 슬라이스를 생성하고, 슬라이싱 연산을 통해 새로운 슬라이스를 만드는 과정을 보여줍니다.
main 함수에서는 다음과 같은 작업을 수행해요:
make([]int, 5)로 길이와 용량이 5인 정수형 슬라이스a를 생성합니다.make([]int, 0, 5)로 길이는 0, 용량은 5인 정수형 슬라이스b를 생성합니다.b[:2]로b의 첫 번째 요소부터 2개 요소를 가져와 새로운 슬라이스c를 생성합니다.c[2:5]로c의 세 번째 요소부터 마지막 요소까지 가져와 새로운 슬라이스d를 생성합니다.
그리고 printSlice 함수를 사용하여 각 슬라이스의 이름, 길이, 용량, 내용을 출력하죠.
이 예제를 실행하면 다음과 같은 결과를 얻을 수 있어요:
a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]
a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]
출력 결과를 통해 make와 슬라이싱 연산이 슬라이스의 길이와 용량에 어떤 영향을 미치는지 확인할 수 있답니다.
이렇게 make 함수를 활용하면 다양한 크기와 용량을 가진 슬라이스를 유연하게 생성할 수 있어요. 상황에 맞게 적절한 슬라이스를 만들어 사용하면 메모리 효율성과 프로그램의 성능을 높일 수 있겠죠?











