https://ko.javascript.info/object-copy
https://ko.javascript.info/array
알았던 것도 다시 보자!
상황
firstFunction() {
let results = property(code) //[{name: "John", age: 23}] 가 있다고 가정
...
secondFunction(results);
}
secondFunction(records) {
...
thirdFunction(records);
}
thirdFunction(data) {
...
data.unshift({name: "Sandy", age: 25});
}
완전 같은 건 아니지만 이런 상황인 경우..
firstFunction안에서 secondFunction으로 넘겼던 results가 secondFunction을 거쳐 thirdFunction에서 파라미터로 받아져서 객체를 배열에 추가 시킨것... 즉 처음 가져왔었던 property(code)에서 가져온 원래 배열에도 추가가 된 것이다...
요약
객체는 참조에 의해 할당되고 복사됩니다. 변수엔 객쳊체가 아닌 메모리상의 주소인 참조가 저장됩니다. 따라서 객체가 할당된 변수를 복사하거나 함수의 인자로 넘길 땐 객체가 아닌 객체의 참조가 복사됩니다.
그리고 복사된 참조를 이용한 모든 작업(프로퍼티 추가.삭제 등)은 동일한 객체를 대상으로 이뤄집니다.
배열의 내부 동작 원리
배열은 특별한 종류의 객체입니다. 배열 arr의 요소를 arr[0]처럼 대괄호를 사용해 접근하는 방식은 객체 문법에서 왔습니다. 다만 배열은 키가 숫자라는 점만 다릅니다.
숫자형 키를 사용함으로써 배열은 객체 기본 기능 이외에도 순서가 있는 컬렉션을 제어하게 해주는 특별한 메서드를 제공합니다. length라는 프로퍼티도 제공하죠. 그렇지만 어쨌든 배열의 본질은 객체입니다.
이렇게 배열은 자바스크립트의 일곱 가지 원시 자료형에 해당하지 않고, 원시 자료형이 아닌 객체형에 속하기 때문에 객체처럼 동작합니다.
배열은 객체와 마찬가지로 참조를 통해 복사됩니다.
'정보 > Language' 카테고리의 다른 글
[Java] Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract! (1) | 2024.11.04 |
---|---|
Kotlin: Functions (0) | 2023.08.02 |
Kotlin: Control Flow (0) | 2023.07.31 |
Kotlin : Hello, world! (0) | 2023.07.20 |
Enum을 사용한 메뉴관리 (0) | 2022.08.26 |