[JS ES6] Reference data type

gminnimk·2025년 3월 20일

JS ES6

목록 보기
11/31

객체지향 문법을 배우기 전에 반드시 이해해야 할 PrimitiveReference 데이터 타입에 대해 알아봅니다.


1️⃣ 데이터 타입 분류

JavaScript에서는 자료형을 크게 두 가지로 구분합니다.

  • Primitive Data Type
    • 정의: 데이터 자체가 변수에 저장됩니다.
    • 예: 문자열(String), 숫자(Number) 등
    • 특징: 값을 복사하면 실제 값이 복사되어 독립적인 복사본이 만들어집니다.
  • Reference Data Type
    • 정의: 데이터가 메모리의 다른 곳에 저장되고, 해당 데이터의 위치(참조, “화살표”)가 변수에 저장됩니다.
    • 예: 객체(Object), 배열(Array) 등
    • 특징: 값을 복사하면 참조(화살표)가 복사되어, 동일한 메모리 상의 데이터를 가리키게 됩니다.

2️⃣ Primitive Data Type

예제: 문자열 복사

var 이름1 = '김';
var 이름2 = 이름1; // 이름1의 값 '김'이 복사됨
이름1 = '박';

console.log(이름1); // 출력: '박'
console.log(이름2); // 출력: '김'
  • 설명:
    • 이름1에 저장된 값이 변경되더라도, 이름2는 초기에 복사한 값을 그대로 유지합니다.

3️⃣ Reference Data Type

예제: 객체 복사 및 변경

var 이름1 = { name: '김' };
var 이름2 = 이름1; // 이름1의 참조(화살표)가 복사됨
이름1.name = '박';

console.log(이름1); // 출력: { name: '박' }
console.log(이름2); // 출력: { name: '박' }
  • 설명:
    • 객체는 실제 데이터가 아닌, 그 데이터가 저장된 메모리 위치(참조)를 변수에 저장합니다.
    • 이름2는 이름1과 같은 참조를 공유하므로, 이름1의 프로퍼티를 변경하면 이름2에서도 변경 사항이 반영됩니다.

4️⃣ 객체의 비교 및 참조 생성

새로운 객체 할당

var 이름1 = { name: '김' };
var 이름2 = { name: '박' };
  • 각 객체를 생성할 때마다 새로운 참조(화살표)가 만들어집니다.

동일한 내용의 객체 비교

var 이름1 = { name: '김' };
var 이름2 = { name: '김' };

console.log(이름1 == 이름2); // 출력: false
  • 설명:
    • 비록 두 객체의 내용은 동일하지만, 서로 다른 메모리 위치(참조)를 가리키므로 == 비교 시 false가 나옵니다.
    • 값 비교를 원한다면 객체의 프로퍼티(예, 이름1.name === 이름2.name)를 비교해야 합니다.

5️⃣ 함수 내에서의 객체 전달과 수정

JavaScript에서 객체를 함수에 전달할 때는 참조(화살표)가 복사되어 전달됩니다.

예제 1: 함수 내부에서 객체 재할당

var 이름1 = { name: '김' };

function 변경(obj) {
  obj = { name: 'park' };
}

변경(이름1);
console.log(이름1); // 출력: { name: '김' }
  • 설명:
    • 함수 변경의 파라미터 obj는 이름1의 참조를 복사받습니다.
    • 함수 내부에서 obj에 새로운 객체를 재할당해도, 원본 변수 이름1은 여전히 기존의 참조를 유지합니다.

image.png

예제 2: 함수 내부에서 객체의 프로퍼티 변경

var 이름1 = { name: '김' };

function 변경(obj) {
  obj.name = 'park';
}

변경(이름1);
console.log(이름1); // 출력: { name: 'park' }
  • 설명:
    • 함수 내에서 obj.name을 직접 수정하면, obj가 가리키는 동일한 객체의 내용이 변경되므로, 원본인 이름1에도 반영됩니다.

📌 정리

  • Primitive Data Type:
    • 변수에 직접 데이터 값이 저장되어 독립적으로 관리됩니다.
  • Reference Data Type:
    • 변수에는 데이터가 저장된 메모리 주소(참조)가 저장되며, 동일 참조를 공유하는 경우 한쪽에서 변경하면 모두에게 반영됩니다.
  • 함수 전달 시 주의:
    • 객체를 함수에 전달할 때는 참조가 복사되지만, 파라미터 재할당과 객체 프로퍼티 수정은 다르게 동작합니다.
      • 재할당: 함수 내부에서 변수 자체를 바꾸어도 원본에는 영향 없음.
      • 프로퍼티 수정: 참조된 객체의 내용 변경은 원본에도 반영됨.

0개의 댓글