🔥 make로 슬라이스 생성하기
Go 언어에서는 내장 함수 make
를 사용하여 슬라이스를 생성할 수 있어요. 이 방법을 통해 동적 크기의 배열을 만들 수 있답니다.
make
함수는 지정된 타입, 길이, 그리고 선택적으로 용량을 인자로 받아 해당 타입의 초기화된 슬라이스를 반환해요. 함수 시그니처는 다음과 같아요:
func make([]T, len, cap) []T
go
T
는 슬라이스의 원소 타입을 나타내요.len
은 슬라이스의 길이를 지정해요.cap
은 선택적으로 슬라이스의 용량을 지정할 수 있어요. 생략하면 길이와 같은 값으로 설정돼요.
make
함수는 주어진 길이와 용량을 가진 배열을 생성하고, 배열의 모든 원소를 해당 타입의 제로값으로 초기화해요. 그리고 그 배열을 가리키는 슬라이스를 반환하죠.
예를 들어, 다음 코드는 make
를 사용하여 길이가 5이고 정수형 원소를 갖는 슬라이스 a
를 생성해요:
a := make([]int, 5) // len(a)는 5, cap(a)도 5
go
위 코드에서 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가 됨
go
위 코드에서는 길이가 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) }
go
위 예제는 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]
text
출력 결과를 통해 make
와 슬라이싱 연산이 슬라이스의 길이와 용량에 어떤 영향을 미치는지 확인할 수 있답니다.
이렇게 make
함수를 활용하면 다양한 크기와 용량을 가진 슬라이스를 유연하게 생성할 수 있어요. 상황에 맞게 적절한 슬라이스를 만들어 사용하면 메모리 효율성과 프로그램의 성능을 높일 수 있겠죠?