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 ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋๊ธ ์ฐ๊ธฐ