๐ฉ๐ป์๋ ํ์ธ์ ์นํฉ ๋ค๋ค๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๊ฒ ์ต๋๋ค ! ์ ๊ฐ ์นํฉ์ ๊ณต๋ถํ๋ ์ด์ ๋ ์ข ๋ ํจ์จ์ ์ธ ์์ ํ๊ฒฝ์ ๋ง๋ค๊ธฐ ์ํด์์ธ๋ฐ์! ์นํฉ์ ์ข์์ ์ธ ๊ฐ์ง๋ฅผ ๊ฐ๋ตํ๊ฒ ์๊ฐํด๋๋ฆด๊ฒ์.
- ํ์ผ ๋จ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ด๋ฆฌ์ ํ์์ฑ (๋ชจ๋๋ฒ๋ค๋ง)
- ์น ๊ฐ๋ฐ ์์ ์๋ํ ๋๊ตฌ (HTML,CSS,JS,์ด๋ฏธ์ง ์์ถ + CSS ์ ์ฒ๋ฆฌ๊ธฐ ๋ณํ)
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅธ ๋ก๋ฉ ์๋์ ๋์ ์ฑ๋ฅ
์ ์ํด์ ์ฌ์ฉํด๋ณด๋๋ก ํ ๊ฑฐ์์.
๋จผ์ ํ์ผ ๋จ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ด๋ฆฌ ํ์์ฑ์ ์์๋ณด์๋ฉด, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๋ ค๋ฉด HTML,CSS,JS,์ด๋ฏธ์ง,ํฐํธ ๋ฑ ๋ง์ ํ์ผ๋ค์ด ํ์ํ์ฃ ! ์ด๊ฒ ๋ชจ๋ ๋ค ๋ชจ๋์ด๋ผ๊ณ ์ง์นญํฉ๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ง์ด๋ ์๋ง์ ํ์ผ๋ค์ ํ๋์ ํ์ผ๋ก ๋ณํฉ ๋ฐ ์์ถ ํด์ฃผ๋ ๋์์ ์๋ฏธํด์. ๊ทธ๋ฆฌ๊ณ ์นํฉ ๋ค๋ค๋ณด๋ฉด์ ์์ฃผ ๋ค์ด๋ณด์ จ์ '๋น๋ํ๋ค = ๋ฒ๋ค๋ง = ๋ณํํ๋ค' ์ด ์ธ ๊ฐ์ง ๋ป์ด ๋ค ๊ฐ์ ๋ป์ ๋๋ค. ๐
์น ๊ฐ๋ฐ ์์ ์๋ํ ๋๊ตฌ๋ HTML,CSS,JS,์ด๋ฏธ์ง ์์ถ๊ณผ CSS ์ ์ฒ๋ฆฌ๊ธฐ ๋ณํ ํด์ฃผ๋ ์ผ๋ค์ ์๋ํ ํด์ฃผ๋ ๋๊ตฌ๋ค์ด ํ์ํ๋๋ฐ ๊ทธ๋์ ๊ทธ๋ฐํธ์ ๊ฑธํ๋ผ๋ ๊ฒ์ด ๋ฑ์ฅํ์ด์. ์ฐธ๊ณ ๋ก ๊ฑธํ๋ ์ฒซ ํ์ฌ ๋ ์ฌ์ฉํด๋ดค๋๋ฐ ์ง์ง ํธํ๋๋ผ๊ตฌ์... ํ์ง๋ง ์ ๋ ๋ค์๊ฐ ์ ํํ ์นํฉ์ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค !!
์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅธ ๋ก๋ฉ ์๋์ ๋์ ์ฑ๋ฅ์ ์ํ ์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ํน์ ์น์ฌ์ดํธ๋ฅผ ์ ๊ทผํ ๋ 3์ด ์ด๋ด๋ก ์น ์ฌ์ดํธ๊ฐ ํ์๋์ง ์์ผ๋ฉด ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ค์ ํด๋น ์ฌ์ดํธ๋ฅผ ๋ฒ์ด๋๊ฑฐ๋ ์ง์ค๋ ฅ์ ์๊ฒ ๋ผ์. ๊ทธ๋์ ์น์ฌ์ดํธ ๋ก๋ฉ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋ง์ ๋ ธ๋ ฅ๋ค์ ํด์ผ ๋๋๋ฐ, ๊ทธ ์ค ๋ํ์ ์ธ ๋ ธ๋ ฅ์ด ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ์์ฒญํ๋ ํ์ผ ์ซ์๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค. ์์ ํ ํ์ผ์ ๋ง์๋ฐ ํ์ผ ์๋ฅผ ์ค์ฌ์ค๋ค๋ผ... ์ ๋ง ์ ๋ฐํ ๊ฑฐ ๊ฐ์์.
๐ฅ ์นํฉ์ ์์๊ฐ๊ธฐ ์ , ๊ฐ๋จํ๊ฒ ๊ฐ๋ ์ ๋ฆฌ ํ๊ณ ๊ฐ์๋ค.
IIFE (Immediately Invoked Function Expression)
์ฆ์ ์คํ ํจ์ํํ์ ์ ์๋์๋ง์ ์ฆ์ ์คํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ฅผ ๋งํด์.
(function () {
statements
})();
์์ฒ๋ผ ์ฒซ ๋ฒ์งธ ๊ดํธ๋ก ๋๋ฌ์ธ์ธ ์ต๋ช ํจ์์ ๋๋ค. ์ด๋ ์ ์ญ ์ค์ฝํ์ ๋ถํ์ํ ๋ณ์๋ฅผ ์ถ๊ฐํด ์ค์ผ์ํค๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ ๋ฟ๋ง ์๋๋ผ, IIFE ๋ด๋ถ ์์ผ๋ก ๋ค๋ฅธ ๋ณ์๋ค์ด ์ ๊ทผํ๋ ๊ฒ์ ๋ง์ ์ ์๋ ๋ฐฉ๋ฒ์ด์์. ๋ ๋ฒ์งธ ๊ดํธ๋ ์ฆ์ ์คํ ํจ์๋ฅผ ์์ฑํ๋ ๊ดํธ์ ๋๋ค. ์ด๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์๋ฅผ ์ฆ์ ํด์ํด์ ์คํ์์ผ์ค์.
๋ค์ํ ๋ชจ๋ ์คํ
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๊ตฌํํ๋ ๋ํ์ ์ธ ๋ช ์ธ๊ฐ AMD, CommonJS ์ ๋๋ค. CommonJS๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฌ์ฉํ๋ ๋ชจ๋ ํ๊ฒฝ์์ ๋ชจ๋ํ ํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค. export ํค์๋๋ก ๋ชจ๋์ ๋ง๋ค๊ณ require() ํจ์๋ก ๋ถ๋ฌ๋ค์ด๋ ๋ฐฉ์์ด์ง์. ๋ํ์ ์ธ ์๋ฒ ์ฌ์ด๋ ํ๋ซํผ์ธ Node.js์์ ์ด ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
๋ด๋ณด๋ผ ๋ (export)
export function sum(a,b) { return a + b;}
๊ฐ์ ธ์ฌ ๋ (import)
import * as math from './math.js'
AMD : ๋น๋๊ธฐ๋ก ๋ก๋ฉ๋๋ ํ๊ฒฝ์์ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค. ์ฃผ๋ก ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ๋งํด์.
UMD : AMD ๊ธฐ๋ฐ์ผ๋ก CommonJS ๋ฐฉ์๊น์ง ์ง์ํ๋ ํตํฉ ํํ์์. ๊ฐ ์ปค๋ฎค๋ํฐ์์ ๊ฐ์์ ์คํ์ ์ ์ํ๋ค๊ฐ ES2015 ์์ ํ์ค๋ชจ๋ ์์คํ ์ ๋ด๋์์ด์. ์ง๊ธ์ ๋ฐ๋ฒจ๊ณผ ์นํฉ์ ์ด์ฉํด ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์ง์.
<script type="module" src="src/math.js"></script>
HTML ๋ธ๋ผ์ฐ์ ์์๋ ์ ์ฝ๋์ฒ๋ผ ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ด์. ์ด๋ ๊ฒ ๋๋ฉด script ๊ตฌ๋ฌธ ์์ type="module" ์ ์ ๋ ฅํด์ค์ผ ํ๋ต๋๋ค. ํ์ง๋ง ์ด๋ด ๋๋ ์๋ฒ๋ฅผ ๋๋ ค์ผ ๋๋๋ฐ npm์ผ๋ก lite-server ํจํค์ง๋ฅผ ์ค์นํด ์ค์ผํด์.
$npx lite-server
์ค์น๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์ค์นํด์ฃผ๊ณ ํ์ฌ ํด๋๋ฅผ ์๋ฒ๋ก ๋ง๋ค์ด ์ค๋๋ค !
์ํธ๋ฆฌ / ์์ํ
์นํฉ์ ์ฌ๋ฌ๊ฐ ํ์ผ์ ํ๋์ ํ์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๋ฒ๋ค๋ฌ๋ผ๊ณ ํ์์์. ํ๋์ ์์์ ์ผ๋ก๋ถํฐ ์์กด์ ์ธ ๋ชจ๋์ ์ ๋ถ ์ฐพ์๋ด์ ํ๋์ ๊ฒฐ๊ณผ๋ฌผ๋ก ๋ง๋ค์ด์ค์. app.js ๋ถํฐ ์์ํด math.js ํ์ผ์ ์ฐพ์ ๋ค ํ๋์ ํ์ผ๋ก ๋ง๋๋ ๋ฐฉ์์ด์์. ์์ ์ฌ์ง์ ๋ณด๋ฉด ์ข ๋ ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ๋๋ค.
๊ทธ๋์ ์ํธ๋ฆฌ์ ์์ํ์ด ๋ญ๋ํ๋ฉด, ์ํธ๋ฆฌ๋ ์ผ์ชฝ์ ์๋ ํ์ผ๋ค์ ๋ปํ๊ณ (=์์์ ) ์์ํ์ ์ค๋ฅธ์ชฝ์ ํ๋์ ํ์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ์ ๋ปํด์. ์นํฉ ๋ค์ด๊ฐ๊ธฐ์ ์์ ๊ฐ๋ ๋ค์ ์์๋ดค๋๋ฐ์. ๋ค์ํธ์ ์ค์ ์ผ๋ก ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.