🔥 슬라이스 범위 기본값

250자
4분

Go 언어에서 슬라이싱을 할 때, 상한값이나 하한값을 생략할 수 있어요. 이렇게 하면 기본값을 사용하게 되죠.

슬라이싱 연산에서 하한값의 기본값은 0이며, 상한값의 기본값은 슬라이스의 길이랍니다.

예를 들어, 아래와 같은 배열이 있다고 해볼까요?

go
var a [10]int
 
go
var a [10]int
 

이 배열에 대해 다음의 슬라이스 표현식은 모두 동일한 결과를 가져온답니다.

go
a[0:10]
a[:10]
a[0:]
a[:]
 
go
a[0:10]
a[:10]
a[0:]
a[:]
 

실제 코드로 한번 살펴볼까요?

go
package main
 
import "fmt"
 
func main() {
	// 초기 슬라이스를 생성해요.
	s := []int{2, 3, 5, 7, 11, 13}
 
	// 인덱스 1부터 4 이전까지 슬라이싱하여 s를 갱신해요.
	s = s[1:4]
	fmt.Println(s) // [3 5 7] 출력
 
	// 인덱스 0부터 2 이전까지 슬라이싱하여 s를 갱신해요.
	s = s[:2]
	fmt.Println(s) // [3 5] 출력
 
	// 인덱스 1부터 끝까지 슬라이싱하여 s를 갱신해요.
	s = s[1:]
	fmt.Println(s) // [5] 출력
}
 
go
package main
 
import "fmt"
 
func main() {
	// 초기 슬라이스를 생성해요.
	s := []int{2, 3, 5, 7, 11, 13}
 
	// 인덱스 1부터 4 이전까지 슬라이싱하여 s를 갱신해요.
	s = s[1:4]
	fmt.Println(s) // [3 5 7] 출력
 
	// 인덱스 0부터 2 이전까지 슬라이싱하여 s를 갱신해요.
	s = s[:2]
	fmt.Println(s) // [3 5] 출력
 
	// 인덱스 1부터 끝까지 슬라이싱하여 s를 갱신해요.
	s = s[1:]
	fmt.Println(s) // [5] 출력
}
 

코드를 하나씩 살펴보면서 슬라이싱 과정과 s의 변화를 이해해 보아요.

  1. 먼저 []int{2, 3, 5, 7, 11, 13}로 초기 슬라이스 s를 생성했어요.
  2. s = s[1:4]로 슬라이싱한 결과를 다시 s에 할당했어요. 이렇게 하면 s[3 5 7]로 갱신되겠죠?
  3. 갱신된 s에 대해 s = s[:2]로 슬라이싱한 결과를 다시 s에 할당했어요. 이제 s[3 5]가 되겠네요.
  4. 마지막으로 갱신된 s에 대해 s = s[1:]로 슬라이싱한 결과를 다시 s에 할당했어요. 최종적으로 s[5]가 되겠죠?

이렇게 슬라이싱 연산의 결과를 원래의 슬라이스 변수에 다시 할당하면, 해당 변수는 슬라이싱된 결과로 갱신된답니다. 따라서 s의 값이 계속 변화하는 것을 볼 수 있어요.

슬라이싱 시에 하한값과 상한값을 생략하면 기본값이 적용되고, 슬라이싱 연산의 결과를 다시 할당하면 슬라이스 변수의 값이 갱신되는 것을 이해하셨나요? 코드를 단계별로 살펴보면서 s의 변화를 추적해 보는 것이 도움이 될 거예요!

YouTube 영상

채널 보기
인터셉터와 RxJS로 캐시 시스템 구축하기 | NestJS 가이드
매번 ValidationPipe 복붙하세요? NestJS 전역 파이프로 한 번에 해결하기 | NestJS 가이드
미들웨어 vs 가드, 왜 NestJS에서는 가드가 더 똑똑할까? | NestJS 가이드
Writer 펑터와 클라이슬리 카테고리 | 프로그래머를 위한 카테고리 이론
API 응답 지연과 복잡한 에러, NestJS 인터셉터로 관리하는 방법 | NestJS 가이드
변환 파이프로 컨트롤러 코드 깔끔하게 만들기 | NestJS 가이드
NestJS 역할 기반 접근 권한 부여 - Guard, Reflector | NestJS 가이드
NestJS 인터셉터에서 map 연산자로 응답을 변환하는 방법 | NestJS 가이드