문제4 : 변수의 타입2
다음 변수 a를 typeof(a)로 넣었을 때 출력될 값과의 연결이 알맞지 않은 것은?
1) 입력 : a =1, 출력 : number
2) 입력 : a = 2.22, 출력 : boolean
3) 입력 : a = 'p', 출력 : string
4) 입력 : a = [1, 2, 3], 출력 : object
// 답: 2) => 결과값 number
🔹 1. 원시 타입 (Primitive Type)
원시 타입은 값이 직접 변수에 저장되며, 불변(immutable)합니다.
즉, 값을 변경할 수 없으며, 변수에 값을 복사하면 새로운 값이 생성됩니다.
✅ 원시 타입 종류
타입 | 예제 | 설명 |
number | let num = 10; | 숫자 (정수, 실수) |
string | let str = "Hello"; | 문자열 |
boolean | let isTrue = true; | 논리 값 (true / false) |
undefined | let x; | 값이 없는 상태 |
null | let y = null; | 값이 "없음"을 명시적 표현 |
symbol | let sym = Symbol("id"); | 고유한 값 생성 |
bigint | let big = 123n; | 아주 큰 정수 |
✅ 원시 타입 특징
1️⃣ 값 자체가 저장되며, 변수 간 복사 시 독립적
let a = 10;
let b = a; // a의 값이 b에 복사됨 (독립적)
b = 20;
console.log(a); // 10 (a는 변하지 않음)
console.log(b); // 20
✔️ b를 변경해도 a는 영향을 받지 않음.
2️⃣ 값이 불변(immutable)
let str = "hello";
str[0] = "H"; // 문자열 변경 불가!
console.log(str); // "hello" (변경되지 않음)
✔️ 문자열을 직접 변경할 수 없으며, 새로운 값을 할당해야 함.
🔹 2. 참조 타입 (Reference Type)
참조 타입은 값이 직접 저장되지 않고, 메모리 주소(참조값)가 저장됩니다.
즉, 같은 객체를 가리키는 변수가 여러 개일 수 있으며, 하나의 변수를 변경하면 다른 변수에도 영향을 줍니다.
✅ 참조 타입 종류
타입 | 예제 | 설명 |
Object | let obj = { name: "Alice" }; | 객체 (key-value 구조) |
Array | let arr = [1, 2, 3]; | 배열 |
Function | let func = function() { return "Hello"; }; | 함수 |
Date | let date = new Date(); | 날짜 |
✅ 참조 타입 특징
1️⃣ 변수에 메모리 주소(참조값)가 저장됨
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj1의 주소가 obj2에 복사됨
obj2.name = "Bob";
console.log(obj1.name); // "Bob"
console.log(obj2.name); // "Bob"
✔️ obj2를 수정했더니 obj1도 변경됨! (같은 객체를 참조)
2️⃣ 객체를 복사하려면 새로운 객체를 만들어야 함
let obj1 = { name: "Alice" };
let obj2 = { ...obj1 }; // 새로운 객체 생성 (Spread 연산자)
obj2.name = "Bob";
console.log(obj1.name); // "Alice" (원본 유지)
console.log(obj2.name); // "Bob"
✔️ ...obj1을 사용하여 새로운 객체를 만들면 독립적인 복사본이 생성됨.
🔹 3. 원시 타입과 참조 타입의 차이점 정리
구분 | 원시 타입(Primitive) | 참조 타입(Reference) |
저장 방식 | 값 자체 저장 | 메모리 주소(참조값) 저장 |
변수 복사 | 값이 복사됨 (독립적) | 주소가 복사됨 (같은 객체를 참조) |
값 변경 | 기존 값 변경 불가 (새로운 값 할당) | 원본 객체 자체가 변경됨 |
메모리 저장 위치 | 스택(Stack) |
🔹 4. 원시 타입을 참조 타입처럼 사용하고 싶다면?
객체처럼 값을 변경하면서 유지하고 싶다면, 객체를 감싸서 사용할 수도 있어요.
let obj = { value: 10 };
function change(obj) {
obj.value = 20;
}
change(obj);
console.log(obj.value); // 20 (객체이므로 변경됨)
✔️ 원시 타입을 객체로 감싸면 참조 타입처럼 동작 가능!
🚀 마무리
✅ 원시 타입: 값 자체 저장, 불변, 변수 복사 시 독립적
✅ 참조 타입: 메모리 주소 저장, 변경 가능, 변수 복사 시 같은 객체를 참조
*** 위 자료는 챗GPT 답변을 옮겼습니다!
'JavaScript' 카테고리의 다른 글
[JS] 코딩테스트 009 - concat (1) | 2025.02.16 |
---|---|
[JS] 코딩테스트 008 - 객체**** (0) | 2025.02.16 |
[JS] 코딩테스트 007 - 변수선언 (0) | 2025.02.16 |
[JS] 코딩테스트 005 - FOR문~ 반복문***(중요) (0) | 2025.02.15 |
[JS] 코딩테스트 001~003 - 배열개념 정리 (0) | 2025.02.15 |