• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 shallow copy

shallow copy

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #34436

    frysweet
    참가자

    선생님 shallow / deep copy 에 대한 글을 보다 이해가 어려운(?) 글을 읽게 되었는데요.

    .splice(), .push() 와 같은 메소드를 사용하면 얕은 복사가 되므로 ,
    1. 중첩 데이터는 복사되지 않는다.
    2. 함수는 복사되지 않는다.

    변수1  =  복제대상 방식으로 깊은 복사를 시도하면,
     배열은 {1: a, 2: b..}  식으로 객체로 변환되서 복제 된다...

    는 내용이었습니다.

     

    그래서 개발자도구에서 직접 실험해봤는데요.
    배열[]과 함수 프로퍼티를 가지고 있는 인스턴스 new A()를 생성해서,  
    그 안에 역시 배열과 함수 프로퍼티를 가지고 있는 인스턴스 new B( ) 를 
    새로운 배열 [] 에 new A() 를 .push() , .splice() 를 사용해서 넣어봤는데,
    프로퍼티로 중첩되어 있는 인스턴스 new B() 와 배열[], 함수 모두 제대로 복제되었습니다. (<- console.log() 로 조회함.)
    중첩의 중첩, 중첩으로 배열에 인스턴스, 또 객체에 인스턴스의 배열의 인스턴스.. 식으로 중첩을 반복해서 넣은다음 조회해도 성공했습니다.

    + 또 변수에 할당하는 식의 '깊은 복사'를 해도 배열[]형태가 객체{}형태로 변환되는 일은 일어나지 않았습니다.

     

    생각해보면 얕은 복사는 참조를 복사하는 것이고, 이 참조는  원본 데이터를 가리키는 것이므로, 이를 통해 원본의 중첩 데이터라도 조회하는데 아무 문제가 없을 것 같은데 이해가 되지 않습니다.

    .splice() 나 .push() 를 사용해 배열[]에 넣어주면,
    배열에 들어간 '참조'를 통해서는,  참조가 가리키는 원본데이터에 중첩된 '인스턴스'나 '배열[]', '함수'가 제대로 나오지 않는 것이 맞나요??

     
    제가 잘못생각하고 있는것인지 피드백 부탁드립니다.

    #34452

    codingapple
    키 마스터

    var a = [1,2, [4,5]] 이걸 var b에 shallow copy 하면 [4,5] 부분은 a와 b가 공유합니다   

    객체로 변한다는건 뭔소린지는 모르겠습니다 

    #34531

    frysweet
    참가자

    만약 var a = [1,2, [ new 인스턴스1(), 4,[5,[6,7, new인스턴스2()]]],8] 형태를 띄고 있고, 
    인스턴스1(), 인스턴스2() 안에 중첩 프로퍼티가 같은 형식으로 존재한다면,
    var a 를 shallow copy를  var b에 했을시, new 인스턴스1(), new 인스턴스2()에 중첩된 데이터와 var a의 .. 4,[5,[6,7, new 인스턴스2()]]] 부분도 var b 를 통해 접근 할 수 있나요?
    var b를 console.log() 했을시 var a의 중첩 데이터 및 인스턴스의 중첩 데이터가 모두 조회되는데, 이걸 공유한다고 볼 수 있을까요??

    #34543

    codingapple
    키 마스터

    그것은 var a를 바꾸면 b도 바뀌는지 실험해보면 됩니다 

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠