04์ฅ ๋ณ์(Variable)
๋ณ์๋ ๋ฌด์์ธ๊ฐ? ์ ํ์ํ๊ฐ?
- ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค. ์๋ฌด๋ฆฌ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ผ ํด๋ ๋ฐ์ดํฐ๋ฅผ
์ ๋ ฅ(input) ๋ฐ์
์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ์ถ๋ ฅ(output)
ํ๋ ๊ฒ์ด ์ ๋ถ๋ค. - ์ปดํจํฐ๋ CPU๋ฅผ ์ฌ์ฉํด ์ฐ์ฐํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ตํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ (memory cell)์ ์งํฉ์ฒด์ด๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ํ๋์ ํฌ๊ธฐ๋ 1๋ฐ์ดํธ(8๋นํธ)์ด๋ฉฐ, ์ปดํจํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ ํฌ๊ธฐ, ์ฆ 1๋ฐ์ดํธ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ(write)ํ๊ฑฐ๋ ์ฝ์ด(read) ๋ค์ธ๋ค.
- ๊ฐ ์
์ ๊ณ ์ ์
๋ฉ๋ชจ๋ฆฌ ์ฃผ์(memory address)
๋ฅผ ๊ฐ์ง๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์น๋ฅผ ๋ํ๋ด๋ฉฐ, 0๋ถํฐ ์์ํด์ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋งํผ ์ ์๋ก ํํ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๋ชจ๋ ๊ฐ์ 2์ง์๋ก ์ ์ฅ๋๋ค. - 10 + 20์ด๋ผ๋ ์ฐ์ฐ์ ํ์ ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ด ์ ์ฅ๋์ง๋ง, ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ฅผ ์ฌ์ฌ์ฉํ ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ง์ ์ ๊ทผํ๋ ๊ฒ ์ธ์๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํด ๊ฐ์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ์น๋ช ์ ์ธ ์ค๋ฅ๋ฅผ ์ผ๊ธฐํ ์ ์๊ธฐ์ Javascript๋ ๊ฐ๋ฐ์์ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ํ์ฉํ์ง ์๋๋ค. - ๋ง์ฝ Javascript๊ฐ ๊ฐ๋ฐ์์ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ํ์ฉํ๋๋ผ๋ ๋ฌธ์ ๊ฐ ์๋ค. ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ์ฝ๋๊ฐ ์คํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ํฉ์ ๋ฐ๋ผ ์์๋ก ๊ฒฐ์ ๋๋๋ฐ, ์ด๋ ๊ณง ๋์ผํ ์ปดํจํฐ์์ ๋์ผํ ์ฝ๋๊ฐ ์คํ๋๋๋ผ๋ ์คํ๋ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์ํฉ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฌธ์ ๊ฐ ์๋ค.
- ๋ณ์(Variable)๋ ํ๋์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ํ๋ณดํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์ฒด ๋๋ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ณํ๊ธฐ ์ํด ๋ถ์ธ ์ด๋ฆ์ด๋ค. ๊ฐ์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์์ง์ ์ธ ์ด๋ฆ์ธ ๊ฒ์ด๋ค.
์ด๋ก ์ธํด ๊ฐ๋ฐ์๋ ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํด ๊ฐ์ ์ ์ฅํ๊ณ ์ฐธ์กฐํ ํ์๊ฐ ์์ด ๋ณ์๋ฅผ ํตํด ์์ ํ๊ฒ ๊ฐ์ ์ ๊ทผํ ์ ์๋ค. - ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ๊ฐ์ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ์ด๋ฆ์ ๋ณ์ ์ด๋ฆ(๋ณ์๋ช )์ด๋ผ ํ๋ค. ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ๋ณ์ ๊ฐ. ๋ณ์์ ๊ฐ์ ์ ์ฅํ๋ ํ์๋ ํ ๋น(assignment, ๋์ , ์ ์ฅ), ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ์ฝ์ด ๋ค์ด๋ ๊ฒ์ ์ฐธ์กฐ(reference) ๋ผ ํ๋ค.
var ํค์๋
var
ํค์๋๋ ๋ณ์๋ฅผ ์์ฑํ ๋ ํ์ํ ํค์๋์ด๋ค.
- ES5(ECMAScript5)๊น์ง๋ var ํค์๋๋ฅผ ์ฌ์ฉํ๋ค, ES6(ECMAScript6)๊ฐ ๋์ค๋ฉด์
var
ํค์๋์ ๋จ์ ์ ๋ณด์ํlet, const
ํค์๋๊ฐ ๋์ ๋๋ค. ์ด๋ ์ถํ ์ฑํฐ์์ ์ค๋ช ํ๊ฒ ๋ค.
var
ํค์๋๋ ๋ณ์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๊ฐ ์งํ๋๋ค.
์ด๊ธฐํ(initialization)๋ ๋ณ์๊ฐ ์ ์ธ๋ ์ดํ ์ต์ด๋ก ๊ฐ์ ํ ๋นํ๋ ๊ฒ์ ๋ปํ๋ค. var
ํค์๋๋ก ์ ์ธํ ๋ณ์๋ undefined
๋ก ์๋ฌต์ ์ธ ์ด๊ธฐํ๊ฐ ์๋ ์ํ๋๋ค.
undefined
๋ Javascript์์ ์ ๊ณตํ๋์์ ํ์ ์ ๊ฐ(primitive value)
์ด๋ค. ์ด ๋ํ ์ถํ ์ฑํฐ์์ ์ค๋ช ํ๊ฒ ๋ค.
var score; // ๋ณ์ ์ ์ธ
console.log(score); // undefined, ์ ์ธ๊ณผ ๋์์ undefined๋ก ์๋ ์ด๊ธฐํ
var score1; // ๋ณ์ ์ ์ธ
var score1 = 80; // ๊ฐ์ ํ ๋น
๋ง์ฝ ๋ณ์์ ์ด๊ธฐํ ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์๋๋ค๋ฉด ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์๋ ์ด์ ์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉํ๋ ๊ฐ์ด ๋จ์์์ ์ ์๋ค. ์ด๋ฌํ ๊ฐ์ ์ฐ๋ ๊ธฐ ๊ฐ(Garbage Value)
์ด๋ผ๊ณ ํ๋ค.
๋ณ์๋ฅผ ์ ์ธํ๋ ค๋ฉด ๋ฐ๋์ ์ ์ธ(declaration)
์ด ํ์ํ๋ค.
๋ณ์๋ฟ๋ง์ด ์๋ ๋ชจ๋ ์๋ณ์(ํจ์, ํด๋์ค)๊ฐ ๊ทธ๋ ๋ค.
๋ง์ฝ, ์ ์ธํ์ง ์์ ์๋ณ์์ ์ ๊ทผํ๋ฉด ReferenceError(์ฐธ์กฐ ์๋ฌ)
๊ฐ ๋ฐ์ํ๋ค.
๋ณ์ ์ ์ธ์ ์คํ ์์ ๊ณผ ๋ณ์ ํธ์ด์คํ
console.log(score); // undefined
var score; // ๋ณ์ ์ ์ธ๋ฌธ
์ ์์ ๋ฅผ ๋ณด๋ฉด ๋ณ์ ์ ์ธ๋ฌธ๋ณด๋ค ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ์ฝ๋๊ฐ ์์ ์๋ค.
Javascript ์ฝ๋๋ ์ธํฐํ๋ฆฌํฐ(Interpreter)
์ ์ํด ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค.
๋ฐ๋ผ์ ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฑฐ ๊ฐ์ง๋ง, undefined
๊ฐ ์ถ๋ ฅ๋๋ค.
๊ทธ ์ด์ ๋ ๋ณ์ ์ ์ธ์ด ์์ค์ฝ๋๊ฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ์์ , ์ฆ ๋ฐํ์(Runtime)์ด ์๋๋ผ ๊ทธ ์ด์ ๋จ๊ณ์์ ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
Javascript ์์ง์ ๋ณ์ ์ ์ธ์ ํฌํจํ ๋ชจ๋ ์ ์ธ๋ฌธ์ ๋จผ์ ์์ค์ฝ๋์์ ์ฐพ์๋ด ์คํํ ๋ค์ ๋ชจ๋ ์ ์ธ๋ฌธ์ ์ ์ธํ๊ณ ์์ฐจ์ ์ผ๋ก ์์ค์ฝ๋๋ฅผ ์คํํ๋ ํน์ฑ์ ์ง๋๊ณ ์๋ค.
์ด์ฒ๋ผ ๋ณ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์์ผ๋ก ๋์ด์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ Javascript ๊ณ ์ ์ ํน์ง์ ๋ณ์ ํธ์ด์คํ
(variable hoisting)์ด๋ผ ํ๋ค.
๊ฐ์ ํ ๋น
์์ ๋งํ๋ฏ ๋ณ์ ์ ์ธ์ ์์ค์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ์์ ์ธ ๋ฐํ์ ์ด์ ์ ๋จผ์ ์คํ๋์ง๋ง ๋ณ์ ๊ฐ์ ํ ๋น์ ์์ค์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ์์ ์ธ ๋ฐํ์ ๋์ ์คํ๋๋ค.
์๋์ ์์ ๋ฅผ ์ฐธ๊ณ ํ์.
console.log(score); // undefined
var score; // 1. ๋ณ์ ์ ์ธ
score = 80; // 2. ๊ฐ์ ํ ๋น
console.log(score); // 80
ํ์ง๋ง ์์ฒ๋ผ ๋ณ์ ๊ฐ์ ํ ๋นํ ๋์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด์ ๊ฐ undefined๊ฐ ์ ์ฅ๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ง์ฐ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น ๊ฐ 80์ ๋ฎ์ด์ ์ ์ฅํ๋ ๊ฒ์ด ์๋, ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ๊ทธ๊ณณ์ ํ ๋น ๊ฐ 80์ ์ ์ฅํ๋ค.
์๋ ์์ ๋ฅผ ์ฐธ๊ณ ํ์.
console.log(score); // undefined
score = 80; // ๊ฐ์ ํ ๋น
var score; // ๋ณ์ ์ ์ธ, 80, ๋จผ์ ๋ณ์ ์ ์ธ์ ์คํํ๊ธฐ์ ๋ฐํ์๋ ์คํ๋๋ 80์ ๊ฐ์ด ๋์
๋จ.
console.log(score); // undefined, ๋ณ์ ๋ช
์ score๋ก ๋์ผํ์ง๋ง ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง๋ค.
๊ฐ์ ์ฌํ ๋น
var
ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๊ฐ์ ์ฌํ ๋นํ ์ ์๋ค.
์ฌํ ๋น์ ํ์ฌ ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ๋ฒ๋ฆฌ๊ณ ์๋ก์ด ๊ฐ์ ์ ์ฅํ๋ค.
์ฌํ ๋น์ ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋์ ๋ณ์๋ผ๊ณ ์ผ์ปซ๋๋ค.
๋ง์ฝ ๊ฐ์ ์ฌํ ๋น ํ ์ ์์ด์ ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ฉด ๋ณ์๊ฐ ์๋๋ผ ์์(constant)๋ผ๊ณ ํ๋ค.
- ES6์์ ์ถ๊ฐ๋
let
ํค์๋๋ ๋ณ์,const
ํค์๋๋ ์์์ ์ญํ ์ ์ํํ๋ค.
var score = 80; // ๋ณ์ ์ ์ธ๊ณผ ๊ฐ์ ํ ๋น
score = 90; // ๊ฐ์ ์ฌํ ๋น
์ ๊ทธ๋ฆผ์ฒ๋ผ score์ ์ต์ข
๊ฐ์ ํ ๋น์ 90์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ์ ํ ๋น๋์๋ undefined
๊ฐ๊ณผ, 80์ ์ด๋๋ก ๊ฐ์๊น?
์๋ฌด๋ ์ฌ์ฉํ๊ณ ์์ง ์์ ์ด๋ฐ ๋ถํ์ํ ๊ฐ๋ค์ ๊ฐ๋น์ง ์ฝ๋ ํฐ(Garbage Collector)
์ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ์๋ ํด์ ๋๋ค.
์๋ณ์ ๋ค์ด๋ฐ ๊ท์น
์๋ณ์(identifier)
๋ ์ด๋ค ๊ฐ์ ๊ตฌ๋ณํด์ ์๋ณํด๋ผ ์ ์๋ ๊ณ ์ ํ ์ด๋ฆ์ด๋ค.
์๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ด๋ฐ ๊ท์น์ ์ค์ํด์ผ ํ๋ค.
- ์๋ณ์๋ ํน์๋ฌธ์๋ฅผ ์ ์ธํ ๋ฌธ์, ์ซ์, ์ธ๋์ค์ฝ์ด(_), ๋ฌ๋ฌ ๊ธฐํธ($)๋ฅผ ํฌํจํ ์ ์๋ค.
- ๋จ, ์๋ณ์๋ ํน์๋ฌธ์๋ฅผ ์ ์ธํ ๋ฌธ์, ์ซ์, ์ธ๋์ค์ฝ์ด(_), ๋ฌ๋ฌ ๊ธฐํธ($)๋ก ์์ํด์ผ ํ๋ค. ์ซ์๋ก ์์ํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋๋ค.
- ์์ฝ์ด๋ ์๋ณ์๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ค์์ ์์ ๋ค์ด๋ค.
var first-name; // - ์ผ๋ฐ ๋์๋ฐ๋ ํ์ฉ๋์ง ์๋๋ค.
var 1st; // ์ซ์๊ฐ ์๋ณ์ ์์ ์ฌ์ฉ๋๋ ๊ฒ์ ํ์ฉ๋์ง ์๋๋ค.
var this; // this๋ ์์ฝ์ด์ด๊ธฐ์ ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ค.
Javascript๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ๋ค. ๋ฐ๋ผ์ ๋ค์ ๋ณ์๋ค์ ๊ฐ๊ฐ ๋ณ๊ฐ์ ๋ณ์๋ค์ด๋ค.
var firstname;
var firstName;
var FIRSTNAME;
๋ค์ด๋ฐ ์ปจ๋ฒค์ (naming convention)์ ํ๋ ์ด์์ ์๋จ์ด๋ก ๊ตฌ์ฑ๋ ์๋ณ์๋ฅผ ๋ง๋ค ๋ ๊ฐ๋ ์ฑ ์ข๊ฒ ๋จ์ด๋ฅผ ํ๋์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๊ท์ ํ ๋ช ๋ช ๊ท์น์ด๋ค.
var firstName; // ์นด๋ฉ ์ผ์ด์ค(camelCase), ๋ณดํธ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.
var first_name; // ์ค๋ค์ดํฌ ์ผ์ด์ค(snake_case)
var FirstName; // ํ์ค์นผ ์ผ์ด์ค(PascalCase)
์ผ๋ฐ์ ์ผ๋ก ๋ณ์๋ ํจ์์ ์ด๋ฆ์๋ ์นด๋ฉ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ , ์์ฑ์ ํจ์&ํด๋์ค์ ์ด๋ฆ์๋ ํ์ค์นผ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
'๐ฅ Front-End > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] 4. ์์์ ํ๋ณํ, ๋ช ์์ ํ๋ณํ, Nominal, ๊ตฌ์กฐํ, ๋ ํ์ดํ (0) | 2022.03.31 |
---|---|
[JS] 5. == & === & typeof (0) | 2022.03.22 |
[JS] 3. ๊ฐ ํ์ (Value Type) & ์ฐธ์กฐ ํ์ (Reference Type) (0) | 2022.03.22 |
[JS] 2. ์์์๋ฃํ(Primitive Types) (0) | 2022.03.22 |
[JS] 1. Call Stack & Event Loop (0) | 2022.03.22 |