더북(TheBook)

3.4 배열과 슬라이스

Go는 순차 데이터의 시퀀스를 다루기 위해 배열(array)과 슬라이스(slice) 타입을 제공한다.

배열은 길이가 고정된 시퀀스이고, 슬라이스는 길이가 가변적인 시퀀스다.

표 3-13 배열과 슬라이스 비교

배열

슬라이스

길이가 고정됨

길이가 가변적임

값 타입(value type)

참조 타입(reference type)

값에 의한 호출(call by value), 값 전체를 복사해서 전달함

참조에 의한 호출(call by reference), 참조 값만 전달함

요소의 타입이 비교 연산자로 비교할 수 있는 타입일 때 배열 전체에 대해서도 비교 연산자(==, !=)로 비교할 수 있음

비교 연산자(==, !=)를 사용할 수 없음

배열보다 슬라이스가 더 유연하고 기능이 풍부하며 사용하기도 쉽다. Go의 기본 라이브러리에도 배열보다 슬라이스를 사용한 코드가 더 많다. 실제 개발할 때도 반드시 배열을 사용해야 하는 특별한 상황이 아니라면 대부분 슬라이스를 사용한다.

표 3-14에 배열과 슬라이스에서 사용할 수 있는 연산자와 내장 함수를 정리했다.

표 3-14 배열/슬라이스 연산자와 내장 함수

연산자와 함수

설명

cap(s)

배열/슬라이스의 용량(배열은 길이와 용량이 항상 같음)

len(s)

배열/슬라이스의 요소 개수

append(s,i)

슬라이스에 새로운 요소를 추가, 배열에는 사용할 수 없음

copy(a,s)

슬라이스 s의 요소를 슬라이스 a에 복사, 배열에는 사용할 수 없음

s=s[:cap(s)]

슬라이스의 길이를 용량만큼 증가시킴, 배열에는 사용할 수 없음(배열은 길이와 용량이 항상 같음)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.