자바스크립트에서 변수는 데이터를 저장하고 나중에 재사용하기 위해 이름을 붙인 저장 공간입니다. var, let, const 키워드를 사용하여 변수를 선언할 수 있으며, 각각의 키워드는 변수의 스코프(유효 범위)와 재할당 가능 여부에 따라 다르게 동작합니다. 예를 들어, let은 블록 스코프를 가지며 재할당이 가능하고, const는 블록 스코프를 가지지만 재할당이 불가능한 상수를 선언할 때 사용합니다. 변수에는 숫자, 문자열, 객체, 배열, 함수 등 다양한 데이터를 저장할 수 있으며, 자바스크립트는 동적 타입 언어이기 때문에 변수에 저장된 값의 자료형은 언제든지 바뀔 수 있습니다.
let name = "apple";
자바스크립트에서는 변수를 만들 때 다음 세 가지 키워드를 사용합니다:
var | 예전 방식. 함수 스코프를 가짐. 지금은 잘 사용하지 않음. |
let | 블록 스코프를 가짐. 값 재할당 가능. 가장 일반적으로 사용됨. |
const | 블록 스코프를 가짐. 값 재할당 불가능. 변하지 않는 값을 저장할 때 사용. |
let age;
선언한 변수에 값을 넣으려면 대입 연산자 =를 사용합니다. 이걸 "값을 대입한다" 또는 "할당한다"라고 표현합니다.
age = 20;
자바스크립트에서는 선언과 동시에 값을 넣을 수도 있습니다.
let name = "apple";
const PI = 3.14;
변수에 저장된 값은 언제든지 이름을 이용해 꺼내 쓸 수 있습니다.
console.log(name); // 출력: apple
자료형(Data Type)은 변수에 저장할 수 있는 값의 종류를 의미합니다. 자바스크립트에서는 숫자, 문자열, 불리언처럼 간단한 값을 저장하는 기본형(Primitive Type)과, 객체나 배열처럼 복잡한 데이터를 저장하는 참조형(Reference Type)으로 나뉩니다. 자료형을 이해하면 변수에 어떤 값을 넣을 수 있고, 그 값이 어떻게 저장되고 동작하는지를 알 수 있어 코드의 안정성과 예측 가능성이 높아집니다. 즉, 자료형은 데이터의 성격을 정의하는 기준이라 할 수 있습니다.
기본형은 값 자체를 저장하며, 변경 불가능한(immutable) 특성을 가집니다. 스택(Stack) 메모리에 저장됩니다. 기본형은 스택에 "값 자체"가 저장됩니다
let a = 100;
let b = a;
b = 200;
참조형은 값이 아니라 주소(참조)를 저장합니다. 힙(Heap) 메모리에 저장되며, 값은 변경 가능합니다.(mutable)
let obj1 = { name: "apple" };
let obj2 = obj1;
obj2.name = "banana";
/*
기본형(Primitive Type)
*/
let num = 20; // 숫자
let str = "Hello, JS!"; // 문자열
let isReady = true; // 불리언
let nothing = null; // null
let notDefined; // undefined (선언만 하고 값 없음)
let bigNumber = 1234567890123456789012345678901234567890n; // BigInt
let unique = Symbol("id"); // Symbol
console.log("기본형 타입 출력:");
console.log("num:", num);
console.log("str:", str);
console.log("isReady:", isReady);
console.log("nothing:", nothing);
console.log("notDefined:", notDefined);
console.log("bigNumber:", bigNumber);
console.log("unique:", unique);
/*
참조형(Reference Type)
*/
let person = { name: "apple", age: 20 }; // 객체
let numbers = [1, 2, 3, 4, 5]; // 배열
let greet = function () {
// 함수
return "안녕하세요!";
};
let now = new Date(); // 날짜 객체
console.log("\n참조형 타입 출력:");
console.log("person:", person);
console.log("numbers:", numbers);
console.log("greet():", greet());
console.log("now:", now);
// 기본형
let x = 10;
let y = x;
y = 20;
console.log(x); // 10
// 참조형
let a = { value: 1 };
let b = a;
b.value = 2;
console.log(a.value); // 2
자바스크립트는 자동으로 사용하지 않는 메모리를 정리해 줍니다. 이를 가비지 컬렉션이라고 부릅니다. 예를 들어 더 이상 참조되지 않는 객체는 자바스크립트가 알아서 메모리에서 제거해 줍니다. 자바스크립트 엔진(예: V8)은 알아서 주기적으로 다음을 반복합니다:
let person = { name: "apple" };
let copy = person;
person = null;
자바스크립트에서 타입 변환(Type Conversion)이란 값의 자료형이 자동 또는 수동으로 다른 타입으로 바뀌는 현상을 말합니다. 자바스크립트는 동적 타입 언어이기 때문에, 상황에 따라 문자열이 숫자로, 숫자가 불리언으로 자동 변환될 수 있습니다. 이처럼 자바스크립트가 코드 실행 중에 자동으로 타입을 바꾸는 것을 암시적(자동) 타입 변환이라 하고, 개발자가 직접 String(), Number() 같은 함수를 사용해 변환하는 것을 명시적(수동) 타입 변환이라고 합니다.
console.log(10 + '문자열')
console.log('3' * '5')
console.log(1 - '일') // NaN
const num1 = '10'
const num2 = '3.5'
console.log(`현재 num1의 타입: ${typeof(num1)}`)
console.log(`Number(num1)의 타입: ${typeof(Number(num1))}`)
console.log(`String(num1)의 타입: ${typeof(String(num1))}`)
console.log(`Boolean(num1)의 타입: ${typeof(Boolean(num1))}, ${Boolean(num1)}`)
console.log(`Object(num1)의 타입: ${typeof(Object(num1))}`)
console.log(`parseInt(num2)의 타입: ${typeof(parseInt(num2))}, ${parseInt(num2)}`)
console.log(`parseFloat(num2)의 타입: ${typeof(parseFloat(num2))}, ${parseFloat(num2)}`)
자바스크립트에서 NaN은 "Not-a-Number", 즉 숫자가 아님을 의미하는 특별한 값입니다. 수학적으로 말이 안 되는 계산이나 숫자로 변환할 수 없는 값을 처리할 때 자동으로 생성됩니다. 예를 들어, 0 / 0, "hello" * 3, parseInt("abc") 같은 연산은 모두 NaN을 반환합니다. 특이하게도 NaN은 자바스크립트에서 number 타입에 속하면서도, 자기 자신과조차 같지 않은 유일한 값입니다 (NaN !== NaN은 true). 그래서 NaN인지 확인할 때는 isNaN()이나 Number.isNaN() 함수를 사용해야 합니다. NaN은 숫자 연산에서 오류를 나타내는 표시로 사용되며, 에러가 발생하지 않고 조용히 처리되는 자바스크립트의 특징 중 하나입니다.
배열 (0) | 2025.04.10 |
---|---|
제어문 - 기본 반복문 (0) | 2025.04.10 |
제어문 - 조건문 (0) | 2025.04.10 |
연산자 (0) | 2025.04.10 |
자바스크립트 (0) | 2025.04.08 |