Development/Javascript
모던 자바스크립트 입문 - Chapter 3: 변수와 값 💻
madebydev
2025. 6. 18. 17:25
안녕하세요! 오늘은 자바스크립트의 핵심 개념 중 하나인 변수와 값에 대해 알아보겠습니다.
📌 목차
- 변수란 무엇인가?
- 변수 선언 방법 (var, let, const)
- 값의 종류와 데이터 타입
- 변수 명명 규칙
- 실습 예제
- 마무리 정리
🤔 변수란 무엇인가?
변수(Variable)는 데이터를 저장하는 공간입니다.
마치 상자에 물건을 담아두는 것처럼, 변수에는 숫자, 문자, 불린값 등 다양한 데이터를 담을 수 있어요.
// 변수에 값을 저장하는 예시
let userName = "김개발";
let age = 25;
let isStudent = true;
📝 변수 선언 방법
1️⃣ var (구식 방법) - 함수 스코프, 재선언 가능
var name = "홍길동";
var age = 30;
특징:
- 함수 스코프를 가짐
- 호이스팅됨
- 재선언 가능
- 현재는 사용을 권장하지 않음
2️⃣ let (권장) - 블록 스코프, 재선언 불가능, 재할당 가능
let userName = "이개발";
let userAge = 28;
// 값 변경 가능
userName = "박개발";
특징:
- 블록 스코프를 가짐
- 재선언 불가능
- 값 변경 (재할당) 가능
3️⃣ const (상수) - 블록스코프, 재선언 / 재할당 불가능
const PI = 3.14159;
const COMPANY_NAME = "테크컴퍼니";
특징:
- 블록 스코프를 가짐
- 재선언 불가능
- 값 변경 (재할당) 불가능
- 선언과 동시에 초기화 필요
🎯 값의 종류와 데이터 타입
자바스크립트의 데이터 타입은 크게 원시 타입과 참조 타입으로 나뉩니다.
원시 타입 (Primitive Types)
1. 숫자 (Number)
let integer = 42; // 정수
let decimal = 3.14; // 소수
let negative = -10; // 음수
2. 문자열 (String)
let singleQuote = '안녕하세요';
let doubleQuote = "반갑습니다";
let templateLiteral = `제 이름은 ${userName}입니다`;
3. 불린 (Boolean)
let isTrue = true;
let isFalse = false;
4. undefined와 null
let undefinedValue; // undefined
let nullValue = null; // null
5. 심벌 (symbol) - ECMAScript 6부터 추가
- 심벌은 자기 자신을 제외한 그 어떤 값과도 다른 유일무이한 값
// 심벌 생성
let symbol1 = Symbol();
let symbol2 = Symbol();
console.log(symbol1 === symbol2); // false (각각 유일한 값)
// 심벌에 설명 추가 (디버깅용)
let userIdSymbol = Symbol('userId');
let adminIdSymbol = Symbol('userId');
console.log(userIdSymbol === adminIdSymbol); // false (설명이 같아도 다른 값)
console.log(userIdSymbol.toString()); // "Symbol(userId)"
// 객체의 속성 키로 사용
let id = Symbol('id');
let user = {
name: "김개발",
age: 25,
[id]: 12345 // 심벌을 키로 사용
};
console.log(user[id]); // 12345
console.log(user.id); // undefined (일반 문자열 키와는 다름)
// 심벌 키는 for...in 루프에서 숨겨짐
for (let key in user) {
console.log(key); // "name", "age"만 출력 (심벌 키는 출력되지 않음)
}
// 심벌 키 확인하기
console.log(Object.getOwnPropertySymbols(user)); // [Symbol(id)]
// 전역 심벌 레지스트리 사용
let globalSymbol1 = Symbol.for('myApp.id');
let globalSymbol2 = Symbol.for('myApp.id');
console.log(globalSymbol1 === globalSymbol2); // true (같은 키로 생성하면 동일한 심벌)
// 실제 사용 예시: 객체에 비공개 속성 만들기
const _privateData = Symbol('privateData');
class User {
constructor(name, email) {
this.name = name;
this.email = email;
this[_privateData] = {
password: "secret123",
lastLogin: new Date()
};
}
getPrivateInfo() {
return this[_privateData];
}
}
let user1 = new User("이개발", "lee@example.com");
console.log(user1.name); // "이개발"
console.log(user1._privateData); // undefined (접근 불가)
console.log(user1.getPrivateInfo()); // 메서드를 통해서만 접근 가능
참조 타입 (Reference Types)
객체 (Object)
let person = {
name: "김개발",
age: 25,
job: "개발자"
};
배열 (Array)
let fruits = ["사과", "바나나", "오렌지"];
let numbers = [1, 2, 3, 4, 5];
✅ 변수 명명 규칙
지켜야 할 규칙
- 영문자, 숫자, _, $ 만 사용 가능
- 숫자로 시작할 수 없음
- 예약어 사용 불가 (let, const, function 등)
- 대소문자 구분
좋은 변수명 예시
// ✅ 좋은 예시
let userName = "김개발";
let totalPrice = 15000;
let isLoggedIn = true;
let userAccountBalance = 50000;
// ❌ 나쁜 예시
let a = "김개발"; // 의미 불분명
let price1 = 15000; // 숫자 사용 지양
let user_name = "김개발"; // 언더스코어보다 카멜케이스 선호
명명 컨벤션
- 카멜케이스(camelCase): userName, totalPrice
- 상수는 대문자: const MAX_COUNT = 100
💡 실습 예제
예제 1: 사용자 정보 관리
// 사용자 정보 변수 선언
const USER_TYPE = "premium";
let userName = "김개발";
let userAge = 28;
let userEmail = "kim@example.com";
let isActive = true;
// 정보 출력
console.log(`사용자명: ${userName}`);
console.log(`나이: ${userAge}세`);
console.log(`이메일: ${userEmail}`);
console.log(`활성 상태: ${isActive ? "활성" : "비활성"}`);
예제 2: 쇼핑몰 장바구니
// 상품 정보
let productName = "무선 이어폰";
let productPrice = 89000;
let quantity = 2;
const TAX_RATE = 0.1;
// 계산
let subtotal = productPrice * quantity;
let tax = subtotal * TAX_RATE;
let total = subtotal + tax;
console.log(`상품: ${productName}`);
console.log(`단가: ${productPrice.toLocaleString()}원`);
console.log(`수량: ${quantity}개`);
console.log(`소계: ${subtotal.toLocaleString()}원`);
console.log(`세금: ${tax.toLocaleString()}원`);
console.log(`총액: ${total.toLocaleString()}원`);
🔍 타입 확인하기
typeof 연산자를 사용하여 변수의 타입을 확인할 수 있습니다:
let name = "김개발";
let age = 25;
let isStudent = true;
let hobbies = ["독서", "코딩"];
let person = { name: "이개발" };
console.log(typeof name); // "string"
console.log(typeof age); // "number"
console.log(typeof isStudent); // "boolean"
console.log(typeof hobbies); // "object"
console.log(typeof person); // "object"
📚 마무리 정리
오늘 배운 내용을 정리하면:
변수는 데이터를 저장하는 공간이며, 모던 자바스크립트에서는 let과 const를 주로 사용합니다.
let은 값 변경이 가능한 변수, const는 상수를 선언할 때 사용합니다.
자바스크립트의 데이터 타입에는 숫자, 문자열, 불린, undefined, null 등의 원시 타입과 객체, 배열 등의 참조 타입이 있습니다.
변수명은 의미가 명확하고 카멜케이스를 사용하여 가독성을 높이는 것이 좋습니다.
💡 오늘 새롭게 알게 된 것
- 기존에 공부를 해왔던게 있어서 새롭게 알게 된 부분은 아직까지는 없었어요
🤔 어려웠던 점
- 새로 추가된 심벌에 대해 이해하는게 어렵네요
🎯 다음 학습 계획
다음 포스팅에서는 객체와 배열, 함수의 기초에 대해 알아보겠습니다. 객체, 배열, 함수의 선언방법을 다뤄볼 예정이니 기대해주세요!