본문 바로가기

JavaScript

[JS] 배열 비우기(빈 배열로 만들기, 초기화) 방법

예전에 사수가 코드리뷰를 하시면서 이런 말씀을 하셨다.

'빈 배열을 만드는 방법 중, 배열의 길이를 0으로 만드는 것과 빈 배열을 할당하는 게 같아 보이지만 차이가 있다.'

처음에는 무슨 말인지 이해를 못해 찾아보았고, 찾아본걸 바탕으로 정리하려고 한다.

 

 

배열이 선언 & 할당되어 있을 때,

배열을 초기화(빈 배열로 만들기)하는 방법은 여러가지가 있겠지만 크게 세 가지로 정리해보려고 한다.

 

 

우선, 아래와 같은 배열이 있다고 해보자.

let name = ['ria', 'Jun']

 

 

방법1. 배열에 새로운 빈 배열을 할당

name = [];

정확하게 말하면 이 방법은 배열을 비우는 것이 아니라, 새로운 빈 배열이 저장된 메모리주소를 참조시키는 것.

 

 

1/ let name = ['ria', 'jun']

처음에는 name이라는 변수가 ['ria', 'jun'] 배열의 주소(0x00001332)가 저장된 메모리 주소 0x000000F2를 가리키고 있었다.

 

2/ name = []

변수 name에 빈배열[]를 재할당한다.

이 때, ['ria', 'jun'] 배열이 []로 변경되는 것이 아니라, 새로운 메모리 주소(0x00001335)에 []를 저장하고, []를 저장한 메모리 주소(참조값. 여기서는 0x00001335)를 저장한 메모리 주소(0x000000F3)를 변수 name이 가리키게 된다.

 

따라서 정확하게 말하면, '배열을 초기화시킨다'라기 보다는 빈 배열이 저장된 메모리의 주소값을 가리킨다(참조)고 보는게 맞을 것 같다.

 

## 문제점

빈 배열을 할당하여 배열을 초기화시키면 아래와 같은 문제가 발생할 수 있다.

let name2 = name
name = []

 

위 코드에서 name2의 값은 어떻게 될까?

name2는 ['ria', 'jun']이 저장된 메모리주소(0x00001332)을 저장하고 있기 때문에 여전히 값은 ['ria', 'jun]이 된다.

 

 

방법2. 배열의 길이를 0으로 만들기

name.length = 0

배열의 길이를 0으로 하여 빈 배열로 초기화 할 수 있다.

이 경우, 다른 여러 변수들이 name 배열을 참조하고 있더라도 그 참조 중인 name배열 자체를 초기화하는 것이므로

name배열을 참조 중인 변수에서 같은 결과를 얻을 수 있다.

 

 

 

방법3. for반복문과 pop 메서드 이용하기

for(let i = 0; i < name.length; i++) {
	name.pop();
}

pop메서드는 배열의 마지막 요소를 제거한다.

따라서, 위 for문에서는 name배열에서 name배열의 길이만큼 for문을 돌려 pop메서드를 실행해, 마지막 요소를 제거함으로써 최종적으로 모든 요소를 제거해 빈 배열이 되도록 만드는 방법이다.

 

 

참조 : https://velog.io/@sukqbe/TILJavaScript-%EB%B0%B0%EC%97%B4