JavaScript

[JS] 코딩테스트 004 - JS 변수타입

Irene1988 2025. 2. 15. 21:44
문제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 답변을 옮겼습니다!