데이터 타입의 종류 (기본형과 참조형)
JS에서 데이터 타입은 크게 기본형(원시 데이터)과 참조형으로 구분됩니다. 기본형과 참조형의 구분 기준은 값의 저장 방식과, 불변성 여부 입니다.
[기본형과 참조형의 구분 기준]
- 복제의 방식
- 기본형(Primitive Type) : 값이 담긴 주소값을 바로 복제
- 참조형(Reference Type) : 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
- 불변성의 여부
- 기본형 : 불변성을 띔
- 참조형 : 불변성을 띄지 않음
- C++에서 데이터 영역에 있는 값과 직접할당한 값의 차이 정도로 생각하면 될것같다. 데이터 영역에 있는 상수는 상수 그 자체로 내가 접근하여 수정이 불가능 하지만 직접선언하여 할당한 변수는 그 주소값을 참조하여 직접 값을 변경할 수 있게 된다.
- 기본형, 참조형의 예시
- 기본형 : Number, String, Boolean, null, undefined, Symbol 과 같은 기본이 되는 자료형.
- 참조형 : 주로 Object(객체)를 의미하며 Array, Function, Data, RegExp, Map, WeakMap, Set, WeakSet 등이 속함.
- 신경써야 하는 이유.
const DFS = (arr, target, index, answer) => {
if(arr.length <= index)
{
return;
}
if(answer === true)
{
return;
}
if(arr[index] + arr[index + 1] === target){
answer = true;
}
else{
DFS(arr, target, index + 1, answer);
}
}
const solution = (arr, target) => {
let answer = false;
for(let i = 0; i < arr.length; i++){
if(answer === true){
return answer;
}
DFS(arr, target, i, answer);
}
return answer;
}
console.log(solution([2, 7, 11, 15], 9));
위 코드에서 DFS의 answer의 증가가 solution의 answer에 전달되지 못하였다.
이유는 JS 에서 기본자료형이 함수 인자로 전달될 때 값에의한 전달 방식으로, DFS의 answer변수를 변경하더라도 solution내의 answer에 영향을 줄 수 없다.
해결하려면 answer를 객체화하여 데이터를 담아 참조에 의한 전달을 수행해주면 된다.
'개발 > JavaScript' 카테고리의 다른 글
[JS] undefined 와 null (0) | 2024.08.20 |
---|---|
[JS] 가비지 콜렉터(Garbage Collecto) (0) | 2024.08.20 |
[JS] Map과 Set (0) | 2024.08.13 |
[JS] 일급 객체로서의 함수 (0) | 2024.08.13 |
[JS] 객체 메소드 (0) | 2024.08.12 |