자바스크립트 참조 타입과 원시 타입의 다른 점
자바스크립트는 동적 프로그래밍 언어로서 많은 타입들을 지원합니다. 이 중에서도 가장 기본이 되는 타입은 원시 타입과 참조 타입입니다. 이 두 가지 타입은 사용하는 방식과 동작 원리에서 다소 차이가 있습니다. 이번 블로그 포스트에서는 자바스크립트의 원시 타입과 참조 타입의 다른 점에 대해 살펴보겠습니다.
원시 타입 (Primitive Types)
원시 타입은 메모리에 고정된 크기로 저장되는 값으로, 다음과 같은 종류가 있습니다:
- 문자열 (String)
- 숫자 (Number)
- 불리언 (Boolean)
- 심볼 (Symbol)
- null
- undefined
원시 타입은 변수에 값을 직접 저장합니다. 예를 들어, 다음과 같이 message
변수에 문자열 타입의 값을 저장할 수 있습니다:
let message = "Hello, world!";
여기서 message
변수는 문자열 “Hello, world!”를 바로 저장하고 있습니다.
원시 타입의 특징
- 원시 타입은 불변성 (Immutable)을 가집니다. 즉, 한 번 값을 할당하면 해당 값을 변경할 수 없습니다. 대신에 새로운 값을 생성하거나 할당해야 합니다.
- 원시 타입은 값에 의한 전달 (Pass by Value)을 합니다. 값이 변수로 복사되어 전달되므로, 원시 타입을 다른 변수에 할당하면 그 값 자체가 복사되어 저장됩니다.
참조 타입 (Reference Types)
참조 타입은 객체 (Object) 형태의 값을 나타내며, 다음과 같은 종류가 있습니다:
- 객체 (Object)
- 배열 (Array)
- 함수 (Function)
- 날짜 (Date)
- 정규 표현식 (RegExp)
- 객체 래퍼 (Object Wrapper)
참조 타입은 원시 타입과는 다른 방식으로 동작합니다. 변수는 실제 값의 주소 (Address)를 저장하며, 실제 값은 힙 (Heap) 메모리에 저장됩니다.
참조 타입의 특징
- 참조 타입은 가변성 (Mutable)을 가집니다. 즉, 값을 변경할 수 있습니다. 참조 타입의 속성과 값은 직접 변경할 수 있습니다.
- 참조 타입은 참조에 의한 전달 (Pass by Reference)을 합니다. 변수는 값의 주소를 저장하므로, 참조 타입을 다른 변수에 할당하면 해당 값의 참조가 전달됩니다.
let person1 = { name: "John", age: 25 };
let person2 = person1; // person1의 참조를 person2에 할당
person2.age = 30;
console.log(person1.age); // 출력: 30
위의 예제에서 person2
는 person1
의 참조를 할당받았기 때문에, person2
의 age
속성을 변경하면 person1
에도 반영됩니다.
결론
자바스크립트에서 원시 타입과 참조 타입은 값의 저장 방식과 동작 원리에서 차이가 있습니다. 원시 타입은 값에 의한 전달을 하며 불변성을 가지고 있으며, 참조 타입은 참조에 의한 전달을 하며 가변성을 가지고 있습니다. 이러한 차이점을 이해한다면 자바스크립트에서 변수와 값의 동작을 더욱 잘 이해할 수 있을 것입니다.