Go - 슬라이스: 동적 배열에 대한 초보자 가이드
안녕하세요, 미래의 Go 프로그래머 여러분! 오늘 우리는 Go의 가장 다재다능하고 강력한 데이터 구조 중 하나를 탐구해 보겠습니다: 슬라이스입니다. 슬라이스는 Go 프로그래밍의 스위스 아ーノ이스 나이프라고 생각해 보세요 - 유연하고 효율적이며, 한 번 마스터하면 슬라이스 없이 어떻게 코딩했는지 의아해질 것입니다!
슬라이스는 무엇인가요?
들어가기 전에, 먼저 기본을 설명해 보겠습니다. Imaging you're planning a party (물론, 코딩 파티입니다!). 방문객 명단이 필요하지만, 몇 명이 올지 모릅니다. 이제 슬라이스가 빛을 발합니다! 슬라이스는 필요에 따라 확장되거나 축소될 수 있는 동적인 명단입니다.
Go에서 슬라이스는 배열의 유연한, 동적인 시각입니다. 마치 창문처럼 크기를 조정할 수 있어, 배열의 일부를 작업하거나 심지어 새로운 배열을 즉시 만들 수 있습니다.
슬라이스 정의하기
우리는 첫 번째 슬라이스를 만들어 보겠습니다. 여러 가지 방법이 있으므로 하나씩 탐색해 보겠습니다.
방법 1: make() 함수 사용
guestList := make([]string, 3)
fmt.Println(guestList) // 출력: [ ]
이 예제에서 우리는 초기 길이가 3인 문자열 슬라이스를 만들었습니다. 마치 파티에 세 개의 빈 의자를 설치하는 것과 같습니다. make()
함수는 우리의 파티 기획자로, 손님들이 오기 전에 공간을 준비합니다.
방법 2: 슬라이스 리터럴
guestList := []string{"Alice", "Bob", "Charlie"}
fmt.Println(guestList) // 출력: [Alice Bob Charlie]
여기서 우리는 슬라이스를 만들고 즉시 손님을 채우고 있습니다. 마치 준비된 VIP 명단과 같습니다!
방법 3: 기존 배열 슬라이스
partyRoom := [5]string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := partyRoom[0:3]
fmt.Println(vipGuests) // 출력: [Alice Bob Charlie]
이 경우 우리는 기존 배열에서 슬라이스를 만들고 있습니다. 마치 파티 룸에서 첫 세 사람을 VIP 명단에 추가하는 것과 같습니다.
len()과 cap() 함수
이제 우리의 명단이 준비되었으므로, 두 개의 중요한 함수에 대해 이야기해 보겠습니다: len()
과 cap()
.
guestList := make([]string, 3, 5)
fmt.Printf("길이: %d, 용량: %d\n", len(guestList), cap(guestList))
// 출력: 길이: 3, 용량: 5
-
len()
은 현재 명단에 있는 손님 수를告诉我们합니다. -
cap()
은 명단이 성장하기 전까지 수용할 수 있는 손님 수를告诉我们합니다.
len()
은 현재 설치된 의자 수를, cap()
은 파티 룸에 있는 의자의 총 수를 상징합니다.
nil 슬라이스
때로는 슬라이스를 선언했지만 초기화하지 않을 수 있습니다. 이를 nil 슬라이스라고 합니다.
var emptyList []string
fmt.Println(emptyList == nil) // 출력: true
nil 슬라이스는 마치 명단의 아이디어가 있지만 아직 명단을 만들지 않은 것과 같습니다. 이는 특정 상황에서 매우 유용할 수 있습니다!
서브슬라이스
서브슬라이스는 파티 안에 VIP 섹션을 만드는 것과 같습니다. 기존 슬라이스의 일부를 선택하여 새로운 슬라이스를 만들 수 있습니다.
fullGuestList := []string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := fullGuestList[1:4]
fmt.Println(vipGuests) // 출력: [Bob Charlie David]
여기서 우리는 인덱스 1에서 3까지의 손님을 선택하여 VIP로 만듭니다 (기억하시오, 종료 인덱스는 포함되지 않습니다).
append()과 copy() 함수
append()
append()
함수는 파티에 새로운 손님을 추가할 수 있는 보안원과 같습니다.
guestList := []string{"Alice", "Bob"}
guestList = append(guestList, "Charlie")
fmt.Println(guestList) // 출력: [Alice Bob Charlie]
한 번에 여러 손님을 추가할 수도 있습니다:
guestList = append(guestList, "David", "Eve")
fmt.Println(guestList) // 출력: [Alice Bob Charlie David Eve]
copy()
copy()
함수는 명단을 복제할 수 있는 파티 기획자와 같습니다.
originalList := []string{"Alice", "Bob", "Charlie"}
newList := make([]string, len(originalList))
copiedElements := copy(newList, originalList)
fmt.Printf("복사한 요소 수: %d. 새 명단: %v\n", copiedElements, newList)
// 출력: 복사한 요소 수: 3. 새 명단: [Alice Bob Charlie]
슬라이스 메서드 표
다음은 우리가 논의한 주요 슬라이스 메서드를 요약한 유용한 표입니다:
메서드 | 설명 | 예제 |
---|---|---|
make() | 슬라이스 생성 | make([]int, 5) |
len() | 슬라이스 길이 반환 | len(slice) |
cap() | 슬라이스 용량 반환 | cap(slice) |
append() | 슬라이스에 요소 추가 | slice = append(slice, 1, 2, 3) |
copy() | 슬라이스 요소 복사 | copy(destSlice, sourceSlice) |
Subslicing | 기존 슬라이스에서 새로운 슬라이스 생성 | newSlice := slice[1:4] |
그리고 여러분, 여러분은 Go 슬라이스의 fascinaning 세계로的第一步을 내딛었습니다. 연습이 완벽을 만들어 줍니다, 그러니 이 개념들을 실험해 보지 마세요. 자신만의 파티 손님 명단을 만들고, 추가하고 복사하는 것을 연습해 보세요. 곧 Go 코드를 마스터하겠죠!
기쁜 코딩을 하고, 여러분의 슬라이스가 항상 필요에 맞게 완벽하게 될 수 있기를 바랍니다!
Credits: Image by storyset