TIL_009_210128

James·2021년 1월 28일
0

TILs

목록 보기
9/40

얕은 복사와 깊은 복사

어제 Koans Sprint를 미리 다 해버려서 오늘은 다시 복습하면서 꼼꼼하게 불확실한 부분 살펴보았다.

  • 얕은 복사(Shallow Copy)
    1) 주소값을 복사하는 것
    2) 엘리먼트가 여러 개인 객체형일 경우 하나의 엘리먼트만이라도 참조값이 있는 상태에서 그냥 Object.assign해버리면 얕은 복사라 할 수 있다.
    ex) const obj = {a:1, b:{c:2}};
    const copiedObj = Object.assign({},obj);
    이 경우, obj.a는 원시값 1 이므로 깊은 복사가 일어나지만, obj.b는 참조값이므로 얕은 복사가 일어난다.
    이 때, copiedObj === obj (false) 이므로 각 객체는 서로 다른 주소를 가지고 있으나 copiedObj.b와 obj.b는 서로 같은 주소를 공유하고 있다는 점을 간과해선 안된다.
  • 깊은 복사(Deep copy)
    1) 원시값(Primitive Data Type)을 복사할 때만 깊은 복사만 일어난다.
    2) const obj = {a:1, b:{c:2}};
    obj를 깊은 복사하려면 반복문과 조건문을 이용한 재귀함수를 이용하거나 이 함수가 내장된 JSON 관련 메소드를 이용하면 된다.

어휘정리

  • Scope 이란? : 변수의 값을 찾을 때 찾아보는 곳
  • lexical scope : 선언된 변수의 범위(Block{}) 내에서만 변수 사용이 허용됨을 의미 (ex. const, let)
  • function scope : 함수 내에 선언된 변수는 그 함수 내에서는 Block{}과 안밖으로 사용 가능함을 의미 (ex. var)
  • 클로저(closure) : 함수와 함수가 선언된 어휘적 환경의 조합
    장점1) Function Factory 기능
    장점2) Name Spacing 문제 해결
  • 클로저 함수 : 외부함수의 변수를 사용할 수 있는 내부함수

! 대충 이해한 것은 제대로 이해한 게 아니구나란 것을 다시 한번 깨닫는 날이다. 복습 및 Summary가 정말 중요하다.

profile
웹개발자 James 입니다.

0개의 댓글