JavaScript에서는 프리미티브와 참조 유형이라는 두 가지 기본 유형의 데이터가 변수에 저장됩니다. 이 두 가지 유형의 차이점을 이해하는 것은 메모리 관리와 데이터 공유, 저장 및 변경을 규제하는 데 필수적입니다. 이 기사에서는 차이점을 자세히 살펴보고 실제 사례를 제공하며 두 종류를 효율적으로 처리하는 방법을 검토합니다.
가장 단순한 종류의 데이터를 프리미티브라고 합니다. 변경 불가능한 데이터를 변수에 직접 저장합니다. JavaScript가 지원하는 기본 유형은 다음과 같습니다.
주요 특징:
반면 참조 유형은 객체의 메모리 위치를 저장합니다. 변수는 실제 값을 저장하는 대신 메모리 주소에 대한 참조를 저장합니다. 그 예는 다음과 같습니다.
주요 특징:
// Primitive Example let a = 10; let b = a; b = 20; console.log(a); // Output: 10 // Reference Example let obj1 = { name: 'Alice' }; let obj2 = obj1; obj2.name = 'Bob'; console.log(obj1.name); // Output: 'Bob'
참조 유형을 사용할 때는 mutation과 할당의 차이점을 이해하는 것이 중요합니다.
// Primitive Example let a = 10; let b = a; b = 20; console.log(a); // Output: 10 // Reference Example let obj1 = { name: 'Alice' }; let obj2 = obj1; obj2.name = 'Bob'; console.log(obj1.name); // Output: 'Bob'
let arr = [1, 2, 3]; let arr2 = arr; arr2.push(4); console.log(arr); // Output: [1, 2, 3, 4]
객체 또는 배열의 별도 복사본을 만들려면 스프레드 연산자(...) 또는 Object.sign()을 사용하세요.
let arr = [1, 2, 3]; let arr2 = arr; arr2 = [4, 5, 6]; console.log(arr); // Output: [1, 2, 3]
중첩된 객체의 경우 전체 복사가 필요합니다. 일반적인 접근 방식은 JSON.parse(JSON.stringify())를 사용하는 것입니다.
let original = { name: 'Alice' }; let copy = { ...original }; copy.name = 'Bob'; console.log(original.name); // Output: 'Alice'
프리미티브를 함수에 전달할 때 값의 복사본이 전달됩니다.
let nested = { person: { name: 'Alice' } }; let deepCopy = JSON.parse(JSON.stringify(nested)); deepCopy.person.name = 'Bob'; console.log(nested.person.name); // Output: 'Alice'
참조 유형을 전달할 때 메모리 위치에 대한 참조가 전달됩니다.
function modifyValue(x) { x = 20; } let num = 10; modifyValue(num); console.log(num); // Output: 10
기본 요소가 불변이더라도 JavaScript는 메서드와 속성에 액세스할 수 있도록 이를 일시적으로 개체에 래핑합니다.
function modifyObject(obj) { obj.name = 'Bob'; } let person = { name: 'Alice' }; modifyObject(person); console.log(person.name); // Output: 'Bob'
길이 속성에 액세스하기 위해 문자열 프리미티브 'hello'가 일시적으로 String 객체로 래핑됩니다. 포장지는 수술 후 폐기됩니다.
let str = 'hello'; console.log(str.length); // Output: 5
의도하지 않은 돌연변이 방지:
독립적인 복사본이 필요한 경우 스프레드 연산자나 전체 복사 기술을 사용하여 생성하세요.
딥 카피를 언제 사용해야 하는지 알아두세요:
얕은 객체의 경우 확산 연산자로 충분하지만 중첩된 구조에는 참조 문제를 피하기 위해 깊은 복사본이 필요합니다.
불변성 활용:
Immutable.js와 같은 라이브러리를 사용하거나 함수형 프로그래밍 기술을 활용하여 의도하지 않은 변형으로 인한 버그를 최소화하세요.
할당과 돌연변이의 혼동:
객체를 수정하는지 아니면 참조를 재할당하는지 주의하세요.
공유 참조 수정:
공유 객체를 변경하면 프로그램의 다른 부분에서도 이를 사용하는 경우 의도하지 않은 결과가 발생할 수 있습니다.
모든 복사본이 독립적이라고 가정:
얕은 복사본은 중첩된 구조의 변경을 방지하지 못한다는 점을 기억하세요.
JavaScript의 핵심 아이디어 중 하나는 기본형과 참조 유형을 구별하는 것입니다. 이는 함수에 데이터를 보내는 방법, 변수를 관리하는 방법, 코드에서 예상치 못한 부작용을 방지하는 방법에 영향을 줍니다. 이러한 아이디어를 파악하고 모범 사례를 사용하면 더욱 신뢰할 수 있고 유지 관리하기 쉬운 JavaScript 코드를 구축할 수 있습니다.
Follow me: Github Linkedin
위 내용은 JavaScript 변수: 기본 요소 및 참조 유형 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!