
71
3
장
복합 타입
append
를 통해 반환된 값을 할당하지 않는다면, 컴파일 오류가 날 것이다. 이런 작업이 약간
반복적이라는 느낌을 지울 수 없을 것이다.
5
장에서 더 자세히 다룰 것이지만, 간단히 요약하
면
Go
는
값에 의한 호출
call
by
value
방식을 사용하는 언어이기 때문이다. 즉
append
로 전달된 슬
라이스는 복사된 값이 함수로 전달된다. 이 함수는 복사된 슬라이스에 값들을 추가하고 추가된
복사본을 반환한다. 그렇기 때문에 함수 호출에 사용한 변수에 반환된 슬라이스를 다시 할당해
줘야 한다.
3.2.3
수용력
앞서 살펴본 대로 슬라이스는 일련의 값을 저장한 것이다. 슬라이스의 각 요소는 연속적인 메
모리 공간에 할당될 것이고, 이런 할당은 값을 빠르게 읽고 쓰기가 가능하도록 한다. 모든 슬
라이스는
수용력
capacity
을 가지는데, 예약된 연속적인 메모리 공간의 크기 값을 가진다. 이 값은
길이 (
len
으로 반환된 값 )보다는 클 수 있다. 슬라이스에 하나 혹은 하나 이상의 값들을 추가
할 때, 슬라이스의 뒤쪽에서 부터 채워진다. 추가된 각 값에 따라 슬라이스의 길이가
1
씩 증가
한다. 길이가 수용할 만큼 증가한다면, 더 이상 값을 넣을 공간이 없게 된다. 길이와 수용력이
같아진 시점에 값을 추가한다면,
append
는
Go
런타임을 사용하여 ...