🔥 Nil 슬라이스

305자
4분

Go 언어에서 슬라이스의 zero value는 nil이에요. Nil 슬라이스는 길이(length)와 용량(capacity)이 0이며, 기본 배열(underlying array)이 없답니다. 다음 코드를 통해 nil 슬라이스의 특성을 살펴볼까요?

go
package main
 
import "fmt"
 
func main() {
    var s []int   // int형 슬라이스 변수 s를 선언합니다.
    fmt.Println(s, len(s), cap(s))   // 슬라이스 s, 길이, 용량을 출력합니다.
    if s == nil {
        fmt.Println("nil!")   // 슬라이스 s가 nil이면 "nil!"을 출력합니다.
    }
}
 
go
package main
 
import "fmt"
 
func main() {
    var s []int   // int형 슬라이스 변수 s를 선언합니다.
    fmt.Println(s, len(s), cap(s))   // 슬라이스 s, 길이, 용량을 출력합니다.
    if s == nil {
        fmt.Println("nil!")   // 슬라이스 s가 nil이면 "nil!"을 출력합니다.
    }
}
 

위 코드에서 var s []int로 int형 슬라이스 변수 s를 선언했어요. 이때 s에는 명시적으로 값을 할당하지 않았으므로 zero value인 nil이 할당됩니다.

그 다음 줄에서는 fmt.Println()으로 슬라이스 slen(s), cap(s)를 출력하고 있어요. 출력 결과를 보면 s[], 즉 빈 슬라이스로 출력되고, len(s)cap(s)는 모두 0으로 출력되는 걸 확인할 수 있습니다.

text
[] 0 0
nil!
text
[] 0 0
nil!

마지막으로 if s == nil 조건문으로 슬라이스 snil인지 검사하고 있어요. 조건문 내부의 fmt.Println("nil!")은 슬라이스 snil일 때만 실행되므로, 콘솔에는 "nil!"이 출력될 거예요.

이렇게 nil 슬라이스는 길이와 용량이 0이며, 기본 배열도 없다는 걸 코드와 함께 확인해 보았어요. nil 슬라이스는 일반적으로 슬라이스 변수를 선언만 하고 값을 할당하지 않았을 때 나타나며, 빈 슬라이스로 취급된답니다.

nil 슬라이스와 빈 슬라이스의 차이점을 명확히 이해하는 것도 중요해요. 다음 표를 통해 nil 슬라이스와 빈 슬라이스의 차이점을 정리해 볼게요.

특성nil 슬라이스빈 슬라이스
선언 방식var s []ints := []int{} 또는 s := make([]int, 0)
길이00
용량00
기본 배열없음있음 (길이와 용량이 0인 배열)
nil 여부truefalse

nil 슬라이스와 빈 슬라이스는 길이와 용량이 모두 0이라는 점에서 동일하지만, nil 슬라이스는 기본 배열이 없고 nil값을 가지는 반면, 빈 슬라이스는 길이와 용량이 0인 기본 배열을 가지고 있다는 점이 다르답니다.

이렇게 nil 슬라이스와 빈 슬라이스의 개념과 차이점을 잘 이해하고 활용한다면 Go 언어로 슬라이스를 다루는 데 많은 도움이 될 거예요!

YouTube 영상

채널 보기
인터셉터와 RxJS로 캐시 시스템 구축하기 | NestJS 가이드
Writer 펑터와 클라이슬리 카테고리 | 프로그래머를 위한 카테고리 이론
입력을 전처리하는 Functor - Contravariant와 contramap 이해하기 | 프로그래머를 위한 카테고리 이론
매번 ValidationPipe 복붙하세요? NestJS 전역 파이프로 한 번에 해결하기 | NestJS 가이드
NestJS 인터셉터에서 map 연산자로 응답을 변환하는 방법 | NestJS 가이드
존 매카시가 들려주는 인공지능의 탄생 이야기
NestJS 커스텀 데코레이터, createParamDecorator 사용 | NestJS 가이드
함수 객체의 보편적 구성 | 프로그래머를 위한 카테고리 이론