본문 바로가기

Core JavaScript5

얕은 복사와 깊은 복사 얕은 복사(Shallow copy) vs 깊은 복사 (Deep copy) 바로 아래 단계의 값만 복사 내부의 모든 값들을 하나하나 찾아서 전부 복사 참조형 데이터가 저장된 프로퍼티를 복사할 때, 그 주솟값만 복사 - 얕은 복사 해당 프로퍼티에 대한 원본과 사본이 모두 동일한 참조형 데이터의 주소를 가리키게 된다. 사본을 바꾸면 원본도 바뀌고, 원본을 바꾸면 사본도 바뀐다. 변수 복사 비교 에서 다뤘던 내용이다. 불변객체 (immutable object) 참조형 데이터의 '가변'은 데이터 자체가 아닌 내부 프로퍼티를 변경할 때만 성립한다. 데이터 자체를 변경하고자 하면(새로운 데이터를 할당하고자 하면) 기본형 데이터와 마찬가지로 기존 데이터는 변하지 않는다. 이럴 때 사용하는 것이, 내부 프로퍼티를 변경할.. 2020. 7. 29.
변수 복사 비교(기본형, 참조형) 일반적으로 '기본형도 결국 주솟값을 참조한다'는 사실을 알려주지 않는다. 이런 내부 원리를 잘 이해하는 것은 향후 중급 개발자로 성장하는 과정에서 더 큰 혼란을 느끼지 않기 위한 중요한 초석이 될 것이라고 믿는다. var a = 10; var b = a; var obj1 = { c: 10, d: 'ddd' }; var obj2 = obj1; 변수 영역 주소 1001 1002 1003 1004 데이터 이름:a 값 : @5001 이름:b 값: @5001 이름:obj1 값 : @5002 이름:obj2 값 : @5002 데이터 영역 주소 5001 5002 5003 5004 데이터 값: 10 값: @7103 ~ ? 'ddd' 객체 @5002의 변수 영역 주소 7103 7104 ---- 데이터 이름:c 값: @50.. 2020. 7. 29.
불변값 & 가변값 불변 값 변수(variable)와 상수(constant)를 구분하는 성질은 '변경 가능성'이다. 바꿀 수 있으면 변수, 바꿀 수 없으면 상수이다. 불변 값과 상수를 같은 개념으로 오해하기 쉬운데, 이 둘을 명확히 구분할 필요가 있다. 변수와 상수를 구분 짓는 변경 가능성의 대상은 '변수 영역' 메모리이다. 데이터 할당이 이뤄진 변수 공간에 다른 데이터를 재할당할 수 있는지 여부가 관건이다. 불변성 여부를 구분할 때의 변경 가능성의 대상은 '데이터 영역' 메모리이다. 기본형인 데이터인 숫자, 문자열, boolean, null, undefined, Symbol은 모두 불변 값이다. var a = 'abc'; a = a + 'def'; var b = 5; var c = 5; b = 7; 변수 a에 문자열 'a.. 2020. 7. 27.
메모리와 데이터 컴퓨터는 모든 데이터를 0 또는 1로 바꿔 기억한다. 0 또는 1만 표현할 수 있는 하나의 메모리 조각을 비트(bit)라고 하고, 메모리는 많은 비트들로 구성되어 있다. 각 비트는 고유한 식별자(unique identifier)를 통해 위치를 확인한다. 자주 사용하지 않을 데이터를 표현하기 위해 빈 공간을 남겨놓기보다는 표현 가능한 개수에 어느 정도 제약이 따르더라도 크게 문제가 되지 않을 적정한 공간을 묶는 편이 낫다. 이런 고민의 결과로 바이트(Byte)라는 단위가 생기게 되었다. 1바이트는 8개의 비트로 구성돼 있다. 1비트마다 0 또는 1의 두 가지 값을 표현할 수 있으므로 1바이트는 총 256(2^8) 개의 값을 표현할 수 있다. 2바이트는 비트 16개이므로 65536(2^16) 개의 값을 표현.. 2020. 7. 27.