JavaScript의 기본형과 참조형 이해하기

BossTeemo·2024년 5월 6일
0
post-thumbnail

JavaScript의 기본형과 참조형 이해하기

소개

JavaScript에서 데이터는 기본형(primitive)과 참조형(reference)으로 나뉩니다. 두 가지 타입은 메모리 저장 방식과 연산 동작 방식이 다릅니다. 이번 글에서는 기본형과 참조형의 차이점을 자세히 살펴보겠습니다.

기본형 (Primitive)

기본형은 불변적(immutable)인 값으로, 변수에 값 자체가 저장됩니다. JavaScript의 기본형 데이터 타입은 다음과 같습니다:

  1. Number

    • 숫자를 나타내며 정수와 부동 소수점 숫자를 포함합니다.
    let age = 25;
  2. String

    • 문자열을 나타냅니다. 작은따옴표, 큰따옴표, 또는 백틱으로 표현합니다.
    let greeting = "Hello, World!";
  3. Boolean

    • 참(true) 또는 거짓(false) 값을 나타냅니다.
    let isAdmin = true;
  4. Symbol

    • 고유하고 변경 불가능한 값으로 객체의 프로퍼티 키로 사용됩니다.
    let sym = Symbol("unique");
  5. BigInt

    • 큰 정수를 나타내는 데 사용됩니다.
    let bigNum = BigInt(123456789012345678901234567890);
  6. Undefined

    • 값이 할당되지 않은 변수 또는 함수의 반환값이 없는 경우를 나타냅니다.
    let value;
    console.log(value); // undefined
  7. Null

    • 의도적으로 "값이 없음"을 나타냅니다.
    let emptyValue = null;

특징:

  • 값의 복사: 변수에 기본형 값을 할당하면 값 자체가 복사됩니다.
  • 불변성: 기본형 값은 불변적이며 변경할 수 없습니다.

참조형 (Reference)

참조형은 가변적(mutable)인 값으로, 변수에 값이 저장된 메모리 주소가 저장됩니다. 참조형 데이터 타입은 다음과 같습니다:

  1. 객체 (Object)

    • 키-값 쌍으로 구성된 데이터를 저장하는 데 사용됩니다.
    let person = {
        name: "Alice",
        age: 30
    };
  2. 배열 (Array)

    • 숫자 인덱스로 요소에 접근할 수 있는 리스트를 나타냅니다.
    let fruits = ["apple", "banana", "orange"];
  3. 함수 (Function)

    • 재사용 가능한 코드를 정의합니다.
    function greet() {
        console.log("Hello");
    }
  4. 기타 객체 유형

    • Date, Set, Map 등 다양한 내장 객체 유형이 있습니다.

특징:

  • 참조에 의한 복사: 변수에 참조형 값을 할당하면 메모리 주소가 복사됩니다.
  • 가변성: 참조형 값은 변경할 수 있습니다.

기본형과 참조형의 차이점

  1. 저장 방식

    • 기본형은 값 자체를 저장하고, 참조형은 값의 메모리 주소를 저장합니다.
  2. 복사 방식

    • 기본형은 값이 직접 복사되지만, 참조형은 메모리 주소가 복사됩니다.
  3. 값의 변경

    • 기본형은 불변적이어서 변경할 수 없습니다. 변경하려면 새로운 값을 할당해야 합니다.
    • 참조형은 가변적이어서 변경 가능합니다.

예시:

// 기본형
let a = 5;
let b = a;
b = 10;
console.log(a); // 5

// 참조형
let obj1 = { value: 1 };
let obj2 = obj1;
obj2.value = 2;
console.log(obj1.value); // 2

결론

JavaScript의 기본형과 참조형은 값의 저장 방식과 복사 방식에 차이가 있습니다. 이를 이해하면 변수 간의 상호 작용을 더 정확히 이해하고 코드를 작성할 수 있습니다.

profile
1인개발자가 되겠다

0개의 댓글