์์ฑ์ : ์ด์ฌ๊ธฐ
ํด๋ก์ ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๊ฐ์ฅ ๋จผ์ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ดํด, ์ ํํ๋ 'ํจ์๊ฐ ์ ์ธ๋ ๋ ์์ปฌ ํ๊ฒฝ'์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
-
๋ ์์ปฌ ํ๊ฒฝ์ด๋, ์๋ณ์์ ์๋ณ์์ ๋ฐ์ธ๋ฉ๋ ๊ฐ. ๊ทธ๋ฆฌ๊ณ ์์ ์ค์ฝํ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ธฐ๋กํ๋ ์๋ฃ๋ก ์คํ ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ์ด๋ค. ์คํ ์ปจํ ์คํธ ์คํ์ด ์ฝ๋์ ์คํ ์์๋ฅผ ๊ด๋ฆฌํ๋ค๋ฉด, ๋ ์์ปฌ ํ๊ฒฝ์ ์ค์ฝํ์ ์๋ณ์๋ฅผ ๊ด๋ฆฌํ๋ค.
-
์๋์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ค์ฝํ๋ฅผ ๊ตฌ๋ถํ๋ ค ์๋ณ์๋ฅผ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌ๋ฅผ ํ๋ ์ ์ฅ์ ์ญํ ์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
-
๋ ์์ปฌ ํ๊ฒฝ์ ๋ํด ์ดํดํ๋ค๋ฉด, ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ์์๋ณด์.
-
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์๋ฅผ ์ด๋์์ ํธ์ถํ๋์ง๊ฐ ์๋๋ผ ํจ์๋ฅผ ์ด๋์ ์ ์ํ๋์ง์ ๋ฐ๋ผ ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค. ์ด๋ฅผ ๋ ์์ปฌ ์ค์ฝํ๋ผ๊ณ ํ๋ค.
const x = 1; function foo() { const x = 10; bar(); } function bar() { console.log(x); } foo(); bar();
- ์ ์์ ์์ ๋ง์ฝ ๊ฒฐ๊ณผ๊ฐ์ 10์ด๋ผ๊ณ ์๊ฐํ๋ค๋ฉด, ๋ ์์ปฌ ํ๊ฒฝ๊ณผ ์ค์ฝํ์ ๋ํด ๋ค์ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ ๊ฑธ ์ถ์ฒํ๋ค...^^
- foo์ bar๋ ๋ชจ๋ ์ ์ญ ํจ์์ด๋ค. ํจ์๋ฅผ ์ด๋์ ํธ์ถํ๋ ์ง๋ ํจ์์ ์์ ์ค์ฝํ ๊ฒฐ์ ์ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ค.
- ์ฆ, ํจ์์ ์์ ์ค์ฝํ๋ ํจ์๋ฅผ ์ ์ํ ์์น์ ์ํด ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๊ณ ๋ณํ์ง ์๋๋ค.
- ๋ ์์ปฌ ํ๊ฒฝ์ "์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ฐธ์กฐ"์ ์ ์ฅํ ์ฐธ์กฐ๊ฐ, ์ฆ ์์ ์ค์ฝํ์ ๋ํ ์ฐธ์กฐ๋ ํจ์ ์ ์๊ฐ ํ๊ฐ๋๋ ์์ ์ ํจ์๊ฐ ์ ์๋ ํ๊ฒฝ(์์น)์ ์ํด ๊ฒฐ์ ๋๋ค.
- ์ด๊ฒ์ด ๋ฐ๋ก "๋ ์์ปฌ ์ค์ฝํ"์ด๋ค.
-
ํด๋ก์ : ์ธ๋ถ ํจ์๋ณด๋ค ์ค์ฒฉ ํจ์๊ฐ ๋ ์ค๋ ์ ์ง๋๋ ๊ฒฝ์ฐ ์ค์ฒฉ ํจ์๋ ์ด๋ฏธ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ข ๋ฃ๋ ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ์ด๋ฌํ ์ค์ฒฉ ํจ์๋ฅผ ํด๋ก์ ๋ผ๊ณ ํ๋ค.
-
๊ธ์๋ก ๋ณด๋ฉด ์ดํดํ๊ธฐ ํ๋๋, ์์ ๋ฅผ ๋ณด๊ณ ์์๋ณด์.
const name = "์ฝ๋"; //1 function outer() { const name = "๋ชจ์นด"; const inner = function () { console.log(name); }; //2 return inner; } const innerFunc = outer(); //3 innerFunc(); //4 ๋ชจ์นด
- ์์ ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ, outer ํจ์๋ ์ค์ฒฉ ํจ์ inner๋ฅผ ๋ฐํํ๊ณ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋ง๊ฐํ๋ค. outer ํจ์์ ์คํ ์ปจํ
์คํธ๋ ์คํ ์ปจํ
์คํธ ์คํ์์ ์ ๊ฑฐ๋๋ค.
์คํ ์ปจํ ์คํธ : ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด๋ก์, ๋์ผํ ์ค์ฝํ์ ์๋ ์ฝ๋๋ค์ ์คํํ ๋ ํ์ํ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๋ชจ์ ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ , ์ด๋ฅผ ํธ์ถ ์คํ(์ฝ ์คํ)์ ์์์ ์คํ ์์๋ฅผ ๋ณด์ฅํ๋ค. ๊ตฌ์ฑ๋๋ ์์๋ก๋ ๋ณ์๊ฐ์ฒด, ์ค์ฝํ ์ฒด์ธ, this๊ฐ ์๋ค.
- ์ด๋, outer ํจ์์ ์ง์ญ ๋ณ์ name๊ณผ ๋ณ์ ๊ฐ '๋ชจ์นด'๋ฅผ ์ ์ฅํ๊ณ ์๋ outerํจ์์ ์คํ ์ปจํ ์คํธ๊ฐ ์ ๊ฑฐ๋์์ผ๋ฏ๋ก outerํจ์์ ์ง์ญ ๋ณ์ name ๋ํ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ง๊ฐํ๋ค.
- ๋ฐ๋ผ์ outer ํจ์์ ์ง์ญ๋ณ์ name์ ๋๋ ์ ํจํ์ง ์๊ฒ ๋์ด name๊ฐ์ ์ ๊ทผํ๋ ๋ฒ์ ์์ด ๋ณด์ธ๋ค.
- ํ์ง๋ง, ์คํ๊ฒฐ๊ณผ 4๋ฒ์ ๊ฒฐ๊ณผ๋ '๋ชจ์นด'์ด๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ํด๋ก์ ๋ค.
- ์์ ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ, outer ํจ์๋ ์ค์ฒฉ ํจ์ inner๋ฅผ ๋ฐํํ๊ณ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋ง๊ฐํ๋ค. outer ํจ์์ ์คํ ์ปจํ
์คํธ๋ ์คํ ์ปจํ
์คํธ ์คํ์์ ์ ๊ฑฐ๋๋ค.
-
๋ํ, ์ ๋ ํด์ผ ํ๋ ๋ถ๋ถ์ outer ํจ์์ ์คํ์ปจํ ์คํธ๊ฐ ์คํ ์ปจํ ์คํธ ์คํ์์ ์ ๊ฑฐ๋๋๋ผ๋, outerํจ์์ ๋ ์์ปฌ ํ๊ฒฝ๊น์ง ์ญ์ ๋๋ ๊ฒ์ ์๋๋ค. outer ํจ์์ ๋ ์์ปฌ ํ๊ฒฝ์ inner ํจ์์ [environment]์ ๋ด๋ถ ์ฌ๋ก์ ์ํด ์ฐธ์กฐ๋๊ณ ์๊ณ , inner ํจ์๋ ์ ์ญ ๋ณ์ innerFunc์ ์ํด ์ฐธ์กฐ๋๊ณ ์์ผ๋ฏ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋์ง ์๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ : ์ฐ๋ ๊ธฐ ์์ง. ๋์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ๋ ์ด์ ์ฐ์ด์ง ์๋ ์์ญ์ ์๋์ผ๋ก ์ฐพ์๋ด์ด ํด์ ํ๋ ๊ธฐ๋ฅ
-
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ํจ์๋ ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ๋ฏ๋ก ์ด๋ก ์ ์ผ๋ก ๋ชจ๋ ํจ์๋ ํด๋ก์ ๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ํจ์๋ฅผ ํด๋ก์ ๋ผ๊ณ ํ์ง ์๋๋ค.
-
ํด๋ก์ ๋ ์ค์ฒฉ ํจ์๊ฐ ์์ ์ค์ฝํ์ ์๋ณ์๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ณ , ์ค์ฒฉ ํจ์๊ฐ ์ธ๋ถ ํจ์๋ณด๋ค ๋ ์ค๋ ์ ์ง๋๋ ๊ฒฝ์ฐ์ ํ์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
function home() { const conan = "์ฒซ์งธ"; const mocha = "๋์งธ"; //ํด๋ก์ //์ค์ฒฉ ํจ์ son์ ์ธ๋ถ ํจ์๋ณด๋ค ๋ ์ค๋ ์ ์ง๋๋ฉฐ //์์ ์ค์ฝํ์ ์๋ณ์๋ฅผ ์ฐธ์กฐํ๋ค. function son() { debugger; console.log(conan, mocha); } return son; } const son = home(); son();
-
ํด๋ก์ ๋ผ๊ณ ํ ์ ์๋ ๊ฒฝ์ฐ
-
์ด๋ ํ ํจ์๋ ์ฐธ์กฐํ์ง ์๋ ํจ์๋ ํด๋ก์ ๊ฐ ์๋๋ค.
function stuckyi() { const teamOne = "ํฌ์ฌ"; const teamTwo = "๋ณ๋ฏผ"; function cheerUp() { const teamThree = "์ฐ์"; debugger; //์์์ค์ฝํ์ ์๋ณ์๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ค. console.log(teamThree); } return cheerUp; } const cheerUp = stuckyi(); cheerUP();
- ์ค์ฒฉํจ์ cheerUp์ด ์ธ๋ถํจ์ stuckyi ๋ณด๋ค ๋ ์ค๋ ์ ์ง๋์ง๋ง ์์ ์ค์ฝํ์ ์ด๋ค ์๋ณ์๋ ์ฐธ์กฐํ์ง ์๊ณ ์๋ค. ์ด์ฒ๋ผ ์์ ์ค์ฝํ์ ์ด๋ค ์๋ณ์๋ ์ฐธ์กฐํ์ง ์๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ ์ต์ ํ๋ฅผ ํตํด ์์ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ์ง ์๋๋ค. ์ฐธ์กฐํ์ง๋ ์๋ ์๋ณ์๋ฅผ ๊ธฐ์ตํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น์ด๊ธฐ ๋๋ฌธ์ด๋ค.
-
์ธ๋ถํจ์๋ณด๋ค ์๋ช ์ฃผ๊ธฐ๊ฐ ์งง์ ์ค์ฒฉํจ์๋ ์ผ๋ฐ์ ์ธ ํด๋ก์ ๊ฐ ์๋๋ค.
function team() { const teamOne = "์ฐฌ๋ฏผ"; //cheerUp ํจ์๋ ํด๋ก์ ์์ง๋ง ๊ณง๋ฐ๋ก ์๋ฉธํ๋ค. function stuckyi() { debugger; //์์ ์ค์ฝํ์ ์๋ณ์๋ฅผ ์ฐธ์กฐํ๋ค. console.log(teamOne); } stuckyi(); } team();
- ์ค์ฒฉํจ์ stuckyi๊ฐ ์์ ์ค์ฝํ์ ์๋ณ์๋ฅผ ์ฐธ์กฐํ๊ณ ์์ผ๋ฏ๋ก ํด๋ก์ ์ด์ง๋ง, ์ธ๋ถํจ์ team์ ์ธ๋ถ๋ก ์ค์ฒฉํจ์ stuckyi๊ฐ ๋ฐํ๋์ง ์๋๋ค.
- ์ฆ, ์ธ๋ถํจ์๋ณด๋ค ์ค์ฒฉํจ์์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์งฆ์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ํด๋ก์ ๋ผ๊ณ ํ์ง ์๋๋ค.
-
-
ํด๋ก์ ๋ ์ํ๋ฅผ ์์ ํ๊ฒ ๋ณ๊ฒฝํ๊ณ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
-
์ฆ, ์ํ๊ฐ ์๋์น ์๊ฒ ๋ณ๊ฒฝ๋์ง ์๋๋ก ์ํ๋ฅผ ์์ ํ๊ฒ ์๋ํ๊ณ ํน์ ํจ์์๊ฒ๋ง ์ํ ๋ณ๊ฒฝ์ ํ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
-
์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, ๋์์ ํ์ง๋ง ์๋์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
-
num ๋ณ์ ๊ฐ์ด increase ํจ์์ ํธ์ถ ์ ๊น์ง ๋ณ๊ฒฝ๋์ง ์๊ณ ์ ์ง๋์ด์ผ ํ๋ค.
-
num ๋ณ์์ ๊ฐ์ increase ํจ์๋ง์ด ๋ณ๊ฒฝํ ์ ์์ด์ผ ํ๋ค.
-
์นด์ดํธ ์ํ๊ฐ ์ ์ญ ๋ณ์๋ฅผ ํตํด ๊ด๋ฆฌ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ ์ง ๋๊ตฌ๋ ์ ๊ทผํ ์ ์๊ณ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
let num = 0; const increase = function () { return ++num; }; console.log(increase()); //1 console.log(increase()); //2 console.log(increase()); //3
-
-
ํด๋ก์ ์ ์ฌ์ฉ ์ด์ ๋ฅผ ์๊ฒ ๋์๋ค๋ฉด, ํด๋ก์ ๋ฅผ ํ์ฉํ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
const increase = (function () { let num = 0; //ํด๋ก์ return function () { //์นด์ดํธ ์ํ๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค. return ++num; }; })(); console.log(increase()); //1 console.log(increase()); //2 console.log(increase()); //3
- ์นด์ดํธ ์ํ๋ฅผ ์์ ํ๊ฒ ๋ณ๊ฒฝํ๊ณ ์ ์งํ๊ธฐ ์ํด num์ ์ง์ญ๋ณ์๋ก ๋ณ๊ฒฝํ๋ค.
- ์ด์ num ๋ณ์๋ increase ํจ์๋ง์ด ๋ณ๊ฒฝํ ์ ์๋ค.
-
์บก์ํ๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ์ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์กฐ์ํ ์ ์๋ ๋์์ธ ๋ฉ์๋๋ฅผ ํ๋๋ก ๋ฌถ๋ ๊ฒ์ด๋ค.
-
๋ํ, ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ถ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๋๋ฐ ์ด๋ฅผ ์ ๋ณด์๋์ด๋ผ๊ณ ํ๋ค.
-
์ ๋ณด์๋์ ์ธ๋ถ์ ๊ณต๊ฐํ ํ์๊ฐ ์๋ ๊ตฌํ์ ์ผ๋ถ๋ฅผ ์ธ๋ถ์ ๊ณต๊ฐ๋์ง ์๋๋ก ๊ฐ์ถ์ด ์ ์ ์น ๋ชปํ ์ ๊ทผ์ผ๋ก๋ถํฐ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ฐฉ์งํด ์ ๋ณด๋ฅผ ๋ณดํธํ๊ณ , ๊ฐ์ฒด๊ฐ์ ์ํธ ์์กด์ฑ, ์ฆ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ ํจ๊ณผ๊ฐ ์๋ค.
๊ฒฐํฉ๋ : ๋ชจ๋๊ณผ ๋ชจ๋๊ฐ์ ์ํธ ์์กด ์ ๋. ์ฌ๊ธฐ์๋ ๊ณตํต ๊ฒฐํฉ๋ (ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๋ชจ๋ ๋ฐ์ ์ ์ธ๋์ด ์๋ ์ ์ญ ๋ณ์๋ฅผ ์ฐธ์กฐํ๊ณ ์ ์ญ๋ณ์๋ฅผ ๊ฐฑ์ ํ๋ ์์ผ๋ก ์ํธ์์ฉํ๋ ๊ฒฝ์ฐ)๋ฅผ ๋ปํ๋ค. ๋ฎ์์๋ก ์ด์์ ์ด๋ค.
-
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด์ ๋ชจ๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ถ์ ๊ณต๊ฐ๋์ด ์๋ค.
-
๊ทธ๋ ๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ๋ณด์๋์ ์๋ฒฝํ ์ง์ํ ์ ์์๊น?
const Stuckyi = (function () { let _age = 0; //private function Stuckyi(name, age) { this.name = name; //public _age = age; } //ํ๋กํ ํ์ ๋ฉ์๋ Stuckyi.prototype.sayHi = function () { console.log(`์๋ , ${this.name}! ๋ ์ด์ ${_age}์ด์ด์ผ~^^`); }; return Stuckyi; })(); const byeongmin = new Stuckyi("๋ณ๋ฏผ", 30); byeongmin.sayHi(); //์๋ , ๋ณ๋ฏผ! ๋ ์ด์ 30์ด์ด์ผ~^^** console.log(byeongmin.name); //๋ณ๋ฏผ console.log(byeongmin.age); //undefined const heeejj = new Stuckyi("ํฌ์ฌ", 30); heeejj.sayHi(); //์๋ , ํฌ์ฌ! ๋ ์ด์ 30์ด์ด์ผ~^^ console.log(heeejj.name); //ํฌ์ฌ console.log(heeejj.age); //30
-
์์ ์์ ๋ฅผ ๋ณด๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ ๋ณด์๋์ด ๊ฐ๋ฅํ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ์ฆ์ ์คํ ํจ์๊ฐ ๋ฐํํ๋ Stuckyi ์์ฑ์ ํจ์์ Stuckyi ์์ฑ์ ํจ์์ ์ธ์คํด์ค๊ฐ ์์๋ฐ์ ํธ์ถํ Stuckyi.prototype.sayHi ๋ฉ์๋๋ ์ฆ์ ์คํ ํจ์๊ฐ ์ข ๋ฃ๋ ํ ์คํ๋๋ค. ํ์ง๋ง Stuckyi ์์ฑ์ ํจ์์ sayHi ๋ฉ์๋๋ ์ด๋ฏธ ์ข ๋ฃ๋์ด ์๋ฉธํ ์ฆ์ ์คํ ํจ์์ ์ง์ญ๋ณ์ _age๋ฅผ ์ฐธ์กฐ ํ ์ ์๋ ํด๋ก์ ์ด๋ค. ํ์ง๋ง ...
-
์์ ์์ ์๋ ๋ฌธ์ ๊ฐ ์๋ค. Stuckyi ์์ฑ์ ํจ์๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด _age ๋ณ์์ ์ํ๊ฐ ์ ์ง๋์ง ์๋ ๋ค๋ ๊ฒ์ด๋ค.
const heeejj = new Stuckyi("ํฌ์ฌ", 30); heeejj.sayHi(); //์๋ , ํฌ์ฌ! ๋ ์ด์ 30์ด์ด์ผ~^^ const byeongmin = new Stuckyi("๋ณ๋ฏผ", 40); byeongmin.sayHi(); //์๋ , ๋ณ๋ฏผ! ๋ ์ด์ 40์ด์ด์ผ~^^ heeejj.sayHi(); //์๋ , ํฌ์ฌ! ๋ ์ด์ 40์ด์ด์ผ~^^
- ์ด๊ฒ์ Stuckyi.prototype.sayHi๊ฐ ๋จ ํ ๋ฒ ์์ฑ๋๋ ํด๋ก์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- Stuckyi.prototype.sayHi๊ฐ ์ด๋ค ์ธ์คํด์ค๋ก ํธ์ถ๋๋๋ผ๋ ํ๋์ ๋์ผํ ์ค์ฝํ๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก, Stuckyi ์์ฑ์ ํจ์๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๊ฒฝ์ฐ _age์ ๋ณ์ ์ํ๊ฐ ์ ์ง๋์ง ์๋๋ค.
- ์ด์ฒ๋ผ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ๋ณด ์๋์ ์์ ํ ์ง์ํ์ง ๋ชปํ์๋๋ฐ .....
-
-
๋คํํ private ํ๋๋ฅผ ์ ์ํ ์ ์๋ ์๋ก์ด ํ์ค ์ฌ์์ด ์ ์๋์๋ค.
-
ํด๋น ๋ฌธ๋ฒ์ ๋ธ๋ผ์ฐ์ ์ง์ ๋ฒ์๋ Private class features ์์ ํ์ธํ ์ ์๋ค.
-
private ํ๋์ ์ ๋์ #์ ๋ถ์ฌ ์ฌ์ฉํ๋ค. private ํ๋๋ฅผ ์ฐธ์กฐํ ๋์๋ #์ ๋ถ์ฌ์ผ ํ๋ค.
class Stuckyi { //private ํ๋ ์ ์ #name = "์ฌ๊ธฐ"; constructor(name) { //private ํ๋ ์ฐธ์กฐ this.#name = name; } } const me = new Stuckyi("์ฐ์"); //private ํ๋ #name์ ํด๋์ค ์ธ๋ถ์์ ์ฐธ์กฐํ ์ ์๋ค. console.log(me.#name); //SyntaxError: Private field '#name' must be declared in an enclosing class
-
๋ค๋ง ์ ๊ทผ์ ํ๋กํผํฐ๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ํจํ๋ค.
class Stuckyi { //private ํ๋ ์ ์ #name = ""; constructor(name) { //private ํ๋ ์ฐธ์กฐ this.#name = name; } //name์ ์ ๊ทผ์ ํ๋กํผํฐ๋ค. get name() { //private ํ๋๋ฅผ ์ฐธ์กฐํ์ฌ trimํ ๋ค์ ๋ฐํํ๋ค. return this.#name.trim(); } } const me = new Stuckyi(" ํฌ์ฌ"); console.log(me.name); //ํฌ์ฌ
-
๋ง์ง๋ง์ผ๋ก private ํ๋๋ ๋ฐ๋์ ํด๋์ค ๋ชธ์ฒด์ ์ ์ํด์ผ ํ๋ค. private ํ๋๋ฅผ ์ง์ constructor์ ์ ์ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
class Stuckyi { constructor(name) { //private ํ๋๋ ํด๋์ค ๋ชธ์ฒด์์ ์ ์ํด์ผ ํ๋ค. this.#name = name; //Private field '#name' must be declared in an enclosing class } }
์ถ์ฒ: ๋ชจ๋์๋ฐ์คํฌ๋ฆฝํธ Deep Dive