Section1 Unit9 [JavaScript] ํต์ฌ ๊ฐ๋ ๊ณผ ์ฃผ์ ๋ฌธ๋ฒ - ์๋ฃํ, ์ค์ฝํ, ํด๋ก์
๐ Chapter1. ์์ ์๋ฃํ๊ณผ ์ฐธ์กฐ ์๋ฃํ
• ์์ ์๋ฃํ(primitive data type) : number, string, boolean, undefined, null
→ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌ ๋ ๋ฐ์ดํฐ๊ฐ์ด ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋ฐ์ดํฐ์ ์ํฅ์ด ๊ฐ์ง ์๋๋ค.
• ์ฐธ์กฐ ์๋ฃํ(reference data type) : array, object, function
→ ๋ฐ์ดํฐ ๋ณต์ฌ ์ ์ฃผ์๋ฅผ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋ฐ์ดํฐ์๋ ์ํฅ์ด ๊ฐ๋ค.
๐ Chapter2. ์ค์ฝํ
• ์ค์ฝํ(scope)๋ ๋ณ์์ ํจ์๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ ๊ท์น์ด๋ค. ์ค์ฝํ๋ ๋ณ์์ ํจ์๊ฐ ์ธ์ , ์ด๋์, ์ด๋ป๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ฅผ ์ ์ํ๋ค.
• ๋ณ์ ์ ์ธ์ var๋ฅผ ์ฌ์ฉํ์ง ์๊ณ let๊ณผ const๋ก ์ ์ธ์ ๋ธ๋ก ์ค์ฝํ๊ฐ ๋๋ค.
๋ธ๋ก ์ค์ฝํ๋ ๋ชจ๋ ์ฝ๋๋ธ๋ก ๋ด์์ ์ ์ธ๋ ๋ณ์๋ ์ฝ๋๋ธ๋ก ๋ด์์๋ง ์ ํจํ๋ฉฐ, ์ธ๋ถ์์๋ ์ ๊ทผํ ์ ์๋ค.
// ๋ธ๋ก ์ค์ฝํ(block scope)
if (true) {
console.log("Hello");
}
{
console.log("Hola");
}
// ํ์ดํ ํจ์๋ ๋ธ๋ก์ค์ฝํ๋ก ์ทจ๊ธ๋๋ค.
let getAge = user => {
return user.age;
}
๋ฐ๋ฉด var๋ ๋ธ๋ก ์ค์ฝํ๋ ๋ฌด์ํ๊ณ (ํ์ดํ ํจ์ ์ ์ธ) ํจ์ ์ค์ฝํ๋ง ๋ฐ๋ฅด๋, var ์ฌ์ฉ์ ์ง์ํ๊ณ ES6 ๋ฌธ๋ฒ์ธ let๊ณผ const๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
๐ฌ ๋๋ ES6 ๋ฌธ๋ฒ์ด ๋ฑ์ฅํ๊ณ ๋ ํ์ฐธ ํ์ ์น ํผ๋ธ๋ฆฌ์ฑ์ ๋ฐฐ์ฐ๋ฉด์ ์ ๊น ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ด๊ทธ๊ธฐ ์์ผ๋ก ๋ฐฐ์ ์๋๋ฐ, ๋ณ์ ์ ์ธ์ var๋ก ๋ฐฐ์ ๋ ๊ธฐ์ต์ด ์๋ค. ์ง๊ธ์ let๊ณผ const๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ฅผ ์๊ณ , ์ฌ์ฉํ๊ณ ์์ง๋ง ์ ๊ตณ์ด ๊ทธ๋ var๋ก ๊ฐ๋ฅด์ณ์ค๊ฑด์ง๋ ์๋ฌธ์ด๋ค. ์ฌ์ง์ด ๋ฐฐ์ฐ๊ธฐ์ ๋ ๋ช ํํ ๊ฒ๋ let๊ณผ const์ธ๋ฐ.
๐ Chapter3. ํด๋ก์
• ํด๋ก์ (closure)๋ ์ฝ๊ฒ ๋งํด์ ํจ์์ ๊ทธ ํจ์๊ฐ ์ ๊ทผํ ์ ์๋ ๋ณ์์ ์กฐํฉ์ด๋ค.
• ํด๋ก์ ์ ํจ์๋ ์ด๋์์ ํธ์ถ๋๋๋์ ๋ฌด๊ดํ๊ฒ ์ ์ธ๋ ํจ์ ์ฃผ๋ณ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ๊ทผํ ์ ์๋ ๋ณ์๊ฐ ์ ํด์ง๋ค.
โ๏ธ Checkpoint ์ข ํฉํด์ฆ
์ด์ ์ ๋๊น์ง๋ ์ข ํฉํด์ฆ ๋ฌธ์ ๋ฅผ ๋ฌด๋ํ ์ดํด ์ ํ๊ณ ๋์ด๊ฐ์๋๋ฐ, ์ค๋์ ๊ฐ๋ ์์ฒด๊ฐ ์ข ์ด๋ ค์์ ๊ทธ๋ฐ์ง ์ข ํฉํด์ฆ๋ ์ด๋ ค์ ๋ค. ๊ทธ๋์ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ ์ ๋ฆฌ๋ฅผ ํด๋ดค๋ค.
1. ์ค์ฝํ ๊ด๋ จ ๋ฌธ์
// result์ ๊ฐ์?
let x = 10;
function outer () {
x = 20;
function inner () {
let x
x = x + 20;
return x;
}
inner(); // NaN
}
outer();
let result = x; // 20
→ outer ํจ์๋ ์ ์ญ ๋ณ์ x์ 20์ ์ฌํ ๋นํ๋ค. outer ๋ด๋ถ์์ inner ํจ์๊ฐ ํธ์ถ๋๊ณ ์์ง๋ง, inner ํจ์๋ ๋ฐ๊นฅ ์ค์ฝํ์ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
inner ํจ์๋ ๊ฐ์ ํ ๋นํ์ง ์์ x๋ฅผ ์ซ์ 20๊ณผ ๋ํ๊ณ ์์ผ๋ฏ๋ก, NaN๋ฅผ ๋ฐํํ๋ค.
2. ํด๋ก์ ๊ด๋ จ ๋ฌธ์
์ด ๋ฌธ์ ๋ ์์ ๋ชปํ๊ณ , ์ฝ๋ ๋๋ ค์ ๋ต์ ํ์ธํ๋ ๋ฌธ์ ๋ค. ๋ค์ ์๊ฐํ๋ฉด์ ์ ๋ฆฌํด๋ณด๋ ์ดํด๊ฐ ๋์๋ค.
// total์ ๊ฐ์?
let add = function(x) {
let sum = function(y) {
return x + y;
}
return sum;
}
let foo = add(1); // foo๋ sum ํจ์
foo(3); // x=1, y=3
let total = foo(6); // x=1, y=6 → total์ 7
→ ํจ์ add๋ x๋ฅผ ๋งค๊ฐ๋ณ์๋ก ํ์ฌ sum์ ๋ฐํํ๋ค.
์ฒ์์ foo๋ sumํจ์๋ฅผ return ํ๊ณ , total์ ์ ์ฃผ์๋๋ก 7์ด ๋๋ค. (total์ ๊ฐ์ธ foo(6)์ add(1)(6)๊ณผ ๊ฐ๋ค.)
์ฌ๊ธฐ์ foo(3)์ 4๋ฅผ ๋ฐํํ์ง๋ง ์ด๋ ํ ๋ณ์์๋ ํ ๋น์ด ๋์ง ์์์ผ๋ฏ๋ก total์ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๐ ์ค๋์ ํ๊ณ
์ค๋ ํ์ตํ ๋ด์ฉ ์ค์ ํด๋ก์ ์ ๊ฐ๋ ๊ณผ ํ์ฉ์ด ์ด๋ ค์ ๋ค. ํด๋ก์ ๋ฅผ ์ดํดํ๋ ค๊ณ ๋ ์์ปฌ ํ๊ฒฝ์ ์ค๋ช ํ๋ ๊ธ๋ ์ฝ์๋๋ฐ ์ฝ๋ค๋ณด๋ ๋๋ฌด ์กธ๋ ค์ ์ง์ค๋๊ฐ ํ ๋จ์ด์ก๋ค… ๐ญ ๊ทธ๋๋ ๊ณ์ ์ฝ์ด๋ณด๊ณ , ๋ผ์ด๋ธ ์ธ์ ๋ ๋ฐฐ์ ๋ ๋ธ๋ผ์ฐ์ ์์ ๋๋ฒ๊ฑฐ ๋๋ฆฌ๋ ๊ฒ๋ ํด๋ณด๊ณ (๋๋ฒ๊ฑฐ ํ์ฉ๋ฒ์ ์ด์ ์ผ ์์๋๋ฐ ์ฌ์ฉํ๋๊ฒ ์์ง ์ต์์น ์์ ๊ฒ ๊ฐ๋ค), ์ด๋์ ๋ ์ดํดํ๋ ค๊ณ ์ ์ฐ๋ ์กฐ๊ธ์ ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ๋ง ์์์ง, ์ด๋ฐ ๋์ ์๋ฆฌ? ๊ฐ์๊ฑด ๊ฑฐ์ ๋ฌด์งํ ์์ค์ด์๋๋ฐ ๊ณต๋ถํ๋ค๋ณด๋ ๋๋ฌด ์ฌ๋ฏธ์๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ๋ค์๋ค. (์ฌ๋ฐ๋๋ฐ ์กธ๋ ค…๐ซ ) ์ค์ฝํ๋ , ํด๋ก์ ์ด๋ ๋ ๊ณต๋ถํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์, ๊ทธ๋ฆฌ๊ณ ์์ ๋ถํฐ ๊ณต๋ถํ ๋ ์์ ํจ์ ๋ช ์ผ๋ก “foo”๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ ์์ฃผ ๋ดค์๋๋ฐ, foo๊ฐ ์ ์ง ์ด๊ฐ์ด ๋ฐ๋ณด๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ์ foo๋ฅผ ์ฐ์ง? ํ๊ณ ๊ถ๊ธํ๋ ์ ์ด ์์๋ค. ์ค๋ ๋๋์ด ์ธ๋ฐ์๋ ๊ถ๊ธํจ์ ๋ฏธ๋ฃจ์ง ์๊ณ ChatGPT ํํ ๋ฌผ์ด๋ดค๋๋ฐ “foo”๋ “function object”์ ์ฝ์ด๋ก ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์์ ์ฝ๋์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ผ์ข ์ ๊ด์ฉ๊ตฌ๋ผ๊ณ ํ๋ค. ์, ๊ทผ๋ฐ ๊ตฌ๊ธ๋ง ํด๋ณด๋ function object์ ์ฝ์ด์ธ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ , ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฒฌ๋ณธ์ฉ ์ด๋ฆ์ผ๋ก foo, bar ๋ฑ์ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ๋๋ฆ ์ฌ๋ฐ๋ ํ์คํ ๋ฆฌ๊ฐ ์๋๊ฒ ๊ฐ์๋ฐ, ์ฌํผ ๋ญ ์์๋ก ์ฌ์ฉํ๋ ์ปจ๋ฒค์ ๊ฐ์ ๊ฑฐ๋ผ๊ณ ํ๋ค.
'Frontend Dev > ๐ฅ ์ฝ๋์คํ ์ด์ธ FE ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Section1 Unit9 ๊ณผ์ JavaScript Koans (0) | 2023.05.01 |
---|---|
Section1 Unit9 JavaScript ํต์ฌ ๊ฐ๋ ๊ณผ ์ฃผ์ ๋ฌธ๋ฒ - ES6 ์ ๊ท ๋ฌธ๋ฒ (0) | 2023.04.28 |
Section1 Unit8 JavaScript ๊ฐ์ฒด (0) | 2023.04.26 |
Section1 Unit8 JavaScript ๋ฐฐ์ด (0) | 2023.04.25 |
Section1 Unit7 Linux, Git ๊ธฐ์ด (0) | 2023.04.24 |