얕은복사 : slice는 원본배열을 변경하지 않는데 왜 얕은 복사일까?

GY·2021년 10월 28일
0

메소드 정리

목록 보기
4/14
post-thumbnail
post-custom-banner

slice의 메서드의 인수를 모두 생략하면 원본배열의 복사본을 생성하여 반환한다.
이 때 생성된 복사본은 얕은 복사를 통해 생성된다.

slice는 얕은 복사를 하는데, 왜 원본 배열의 값을 변경하지 않을까?


얕은복사

얕은 복사는 한 단계까지만 복사하는 것을 말하는데, 원본 배열의 참조값을 그대로 복사해온다.

    const players = ['Wes', 'Sarah', 'Ryan', 'Poppy'];

    const team2 = players.slice();
    team2[1]="changed"

    console.log(team2 === players)// false
    console.log(team2[2] === players[2])//true
  • slice는 원본배열과 다른 새로운 배열을 반환하므로, players와 team2는 참조값이 다른 별개의 배열이다. 따라서 team2 === playersfalse이다.

  • 그러나 배열 요소의 참조값은 같다. 즉, 얕은 복사되었다.
    team2[2] === players[2]true이다.



정리

즉, 복사된 배열 자체의 참조값은 새로 생성되었으나,
각 배열 요소의 참조값은 원본 배열요소의 참조값을 그대로 복사해왔기 때문에 (얕은복사) 동일하다.

profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.
post-custom-banner

0개의 댓글