Go - 슬라이스: 동적 배열에 대한 초보자 가이드

안녕하세요, 미래의 Go 프로그래머 여러분! 오늘 우리는 Go의 가장 다재다능하고 강력한 데이터 구조 중 하나를 탐구해 보겠습니다: 슬라이스입니다. 슬라이스는 Go 프로그래밍의 스위스 아ーノ이스 나이프라고 생각해 보세요 - 유연하고 효율적이며, 한 번 마스터하면 슬라이스 없이 어떻게 코딩했는지 의아해질 것입니다!

Go - Slice

슬라이스는 무엇인가요?

들어가기 전에, 먼저 기본을 설명해 보겠습니다. 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