Responsive Advertisement

JavaScript Variables: ๋ณ€์ˆ˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ดํ•ด

JavaScript์—์„œ ๋ณ€์ˆ˜(Variable)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ ๋‚ด์—์„œ ๊ทธ ๊ฐ’์„ ํ™œ์šฉํ•ด ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ JavaScript์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์„ ์–ธํ•˜๊ธฐ

JavaScript์—์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ var, let, const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ‚ค์›Œ๋“œ๋Š” ๋ณ€์ˆ˜์˜ ํŠน์„ฑ๊ณผ ์Šค์ฝ”ํ”„(scope)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

var ํ‚ค์›Œ๋“œ

var๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์žฌ์„ ์–ธ๊ณผ ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ var๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, let๊ณผ const๊ฐ€ ๋„์ž…๋œ ์ดํ›„๋กœ๋Š” ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

var name = "Alice";
var name = "Bob"; // ์žฌ์„ ์–ธ ๊ฐ€๋Šฅ
console.log(name); // "Bob"

let ํ‚ค์›Œ๋“œ

let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ธ”๋ก ๋‚ด์—์„œ ์žฌ์„ ์–ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์™ธ๋ถ€ ๋ธ”๋ก์—์„œ๋Š” ๋™์ผํ•œ ๋ณ€์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let age = 30;
age = 31; // ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
console.log(age); // 31

const ํ‚ค์›Œ๋“œ

const๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๊ณ , ์ดํ›„์—๋Š” ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜ ๊ฐ’์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฒฝ์šฐ, ๋‚ด๋ถ€ ์†์„ฑ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฐธ์กฐ ์ž์ฒด๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

const birthYear = 1990;
console.log(birthYear); // 1990

// const๋กœ ์„ ์–ธ๋œ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์†์„ฑ์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
const person = {
    name: "Alice",
    age: 30
};
person.age = 31; // ๊ฐ€๋Šฅ
console.log(person.age); // 31

๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„(Scope)

๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„๋Š” ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. JavaScript์—์„œ๋Š” ์ฃผ๋กœ ๋‘ ๊ฐ€์ง€ ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„์™€ ๋ธ”๋ก ์Šค์ฝ”ํ”„์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„

var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ, ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

function myFunction() {
    var message = "Hello, World!";
    console.log(message); // "Hello, World!"
}
console.log(message); // Error: message is not defined

๋ธ”๋ก ์Šค์ฝ”ํ”„

let๊ณผ const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๋ธ”๋ก({ }) ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๋ฉฐ, ๋ธ”๋ก ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

if (true) {
    let greeting = "Hi!";
    console.log(greeting); // "Hi!"
}
console.log(greeting); // Error: greeting is not defined

๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(Variable Hoisting)

JavaScript๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์ฝ”๋“œ์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” "ํ˜ธ์ด์ŠคํŒ…"์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ์ด ํ˜ธ์ด์ŠคํŒ…๋˜์ง€๋งŒ, ํ• ๋‹น๋œ ๊ฐ’์€ ํ˜ธ์ด์ŠคํŒ…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, let๊ณผ const๋Š” ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ชจ๋‘ ํ˜ธ์ด์ŠคํŒ…๋˜์ง€๋งŒ, ์ดˆ๊ธฐํ™” ์ „์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ReferenceError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

console.log(myVar); // undefined
var myVar = "Hello!";

console.log(myLet); // Error: Cannot access 'myLet' before initialization
let myLet = "Hi!";

๊ฒฐ๋ก 

JavaScript์—์„œ ๋ณ€์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์˜ ์„ ์–ธ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ํŠน์„ฑ๊ณผ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. var, let, const ํ‚ค์›Œ๋“œ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”. ๋ณ€์ˆ˜๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ๋” ๊น”๋”ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด JavaScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€ ์“ฐ๊ธฐ