본문 바로가기
개발/JavaScript

[JS] 데이터 타입의 종류

by WaDDak 2024. 8. 20.

데이터 타입의 종류 (기본형과 참조형)

JS에서 데이터 타입은 크게 기본형(원시 데이터)과 참조형으로 구분됩니다. 기본형과 참조형의 구분 기준은 값의 저장 방식과, 불변성 여부 입니다.

 

[기본형과 참조형의 구분 기준]

  1. 복제의 방식
    • 기본형(Primitive Type) : 값이 담긴 주소값을 바로 복제
    • 참조형(Reference Type) : 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
  2. 불변성의 여부
    • 기본형 : 불변성을 띔
    • 참조형 : 불변성을 띄지 않음
    • C++에서 데이터 영역에 있는 값과 직접할당한 값의 차이 정도로 생각하면 될것같다. 데이터 영역에 있는 상수는 상수 그 자체로 내가 접근하여 수정이 불가능 하지만 직접선언하여 할당한 변수는 그 주소값을 참조하여 직접 값을 변경할 수 있게 된다.
  3. 기본형, 참조형의 예시
    • 기본형 : Number, String, Boolean, null, undefined, Symbol 과 같은 기본이 되는 자료형.
    • 참조형 : 주로 Object(객체)를 의미하며 Array, Function, Data, RegExp, Map, WeakMap, Set, WeakSet 등이 속함.
  4. 신경써야 하는 이유.
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