JavaScript 기본 | 값 | 참조 타입

Faithful Dev·2025년 5월 20일
0

프리스쿨

목록 보기
22/25

참조 타입이란?

참조 타입은 값 자체가 아닌 메모리 주소(참조)를 통해 데이터를 다루는 타입이다.
객체, 배열, 함수 등 복잡한 구조의 데이터가 여기에 속한다.


자바스크립트의 주요 참조 타입

타입설명예시
Object키-값 쌍의 데이터 구조{ name: "John", age: 30 }
Array순서가 있는 리스트[1, 2, 3]
Function실행 가능한 코드function() { return 1; }
Date날짜 및 시간 정보new Date()
RegExp정규 표현식/ab+c/
기타Map, Set, WeakMap, WeakSet 등 ES6 이후 추가된 컬렉션 타입들

참조 타입의 특징

메모리 참조를 저장

변수에는 실제 값이 아닌 객체가 저장된 메모리 주소(참조)가 저장된다.

let obj1 = { name: "Alice" };
let obj2 = obj1;

ob2.name = "Bob";

console.log(obj1.name); // "Bob"

obj1obj2같은 객체를 가리키고 있기 때문에, 하나를 수정하면 다른 쪽에도 영향을 미친다.


얕은 복사 vs. 깊은 복사

  • 얕은 복사 (Shallow Copy): 참조만 복사됨 → 원본 변경 시 영향 받음
  • 깊은 복사 (Deep Copy): 값 자체를 완전히 복제 → 원본과 독립적
// 얕은 복사
let original = { a: 1 };
let copy = original;
copy.a = 2;

console.log(original.a); // 2

// 깊은 복사
let deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.a = 100;

console.log(original.a); // 2
console.log(deepCopy.a); // 100

typeof 결과는 대부분 'object'

typeof {}; // "object"
typeof []; // "object"
typeof function(){} // "function" ← 특별 처리됨
typeof null; // "object" ← 버그로 인해 이 결과가 나옴

nullobject로 나오는 건 오래된 JS 설계 실수지만, 지금도 그대로 유지되고 있다.


속성 및 메서드 사용 가능

참조 타입은 속성(property)메서드(method)를 가질 수 있다:

let user = {
  name: "Jane",
  greet: function() {
    console.log("Hello!");
  }
};

console.log(user.name); // "Jane"
user.greet(); // "Hello!"

함수도 참조 타입

자바스크립트에서는 함수도 일급 객체(First-class object)로 취급되며 참조 타입이다:

function greet() {
  return "Hello";
}

let fn = greet;
console.log(fn()); // "Hello"

원시 타입과 참조 타입 비교

항목원시 타입참조 타입
저장 방식값 자체메모리 참조 (주소)
복사 시값 복사 (독립적)참조 복사 (공유됨)
변경 가능성불변 (immutable)변경 가능 (mutable)
크기작음상대적으로 큼
typeof 결과string, number, 등object, function

요약

  • 참조 타입은 값이 아닌 주소(참조)를 저장
  • 같은 객체를 참조하는 변수는 서로 영향을 줌
  • 객체, 배열, 함수 등이 이에 해당
  • 복사할 땐 얕은/깊은 복사 구분 필요
  • typeof 결과 대부분 "object"
profile
Turning Vision into Reality.

0개의 댓글