ํฐ์คํ ๋ฆฌ ๋ทฐ
1. ๊ธฐ๋ณธ๋ฌธ๋ฒ
1.1. ์๋ฐ์คํฌ๋ฆฝํธ ํน์ง
1.1.1. ํจ์
์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ์ดํ์ ์ ํจ๋ฒ์๋ฅผ ๊ฐ์ง ์ผ๊ธ ๊ฐ์ฒด์ ๋๋ค. ์ฆ, ํจ์๋ ๋ณ์์ ๋์ ๋๊ฑฐ๋ ์ธ์๋ก ๋๊ธธ ์๋ ์๊ณ , ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ์ฐ์ฐ ๋ฑ์ ์ฌ์ฉํ๋๋ฐ ์ ํ ์ ์ฝ์ด ์๋ ๊ฐ์ฒด์ ๋๋ค.
1.1.2. ๋์จํ ํ์ ์ฒดํฌ
์๋ฐ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ ํ์ ์ค๋ฅ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ณต์กํ ํด๋์ค ๊ณ์ธต์ ๊ตฌ์ฑํ ํ์๋๊ฐ ์๊ณ , ํ์ ์บ์คํ ์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋ฉ๋๋ค.
1.1.3. Object Literal
์ฝ๋ก ์ผ๋ก ๊ตฌ๋ณ๋๋ ํ๋กํผํฐ ์ด๋ฆ/๊ฐ ์๋ค์ด ๋ค์ ์ผํ๋ก ๋ถ๋ฆฌ๋ ๋ชฉ๋ก์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Json์ ๊ธฐ์ด๊ฐ ๋๋ฉฐ, ํ์ํ ์์๋ค์ ์ด๊ฑฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
1.1.4. prototype์ ์ํ ์์
ํด๋์ค ๊ธฐ๋ฐ ์ธ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ด์ฅ๋ prototype์ ์ด์ฉํด ์์์ ๊ตฌํ ํฉ๋๋ค.
1.1.5. Global variable
์ต์์ ๋ ๋ฒจ์ ์ ์ธ๋ ๋ณ์๋ ์ปดํ์ผ ์์ ์ ์ญ ๋ณ์๋ก ์ทจ๊ธ๋์ด ์ ์ญ ๊ฐ์ฒด(Global object)๊ฐ ๋ฉ๋๋ค. ํ์ ํ๊ฒ ์ง๋ง, ์ฑ๋ฅ์ ์ข์ง ์์ต๋๋ค.
1.1.6. ํ๋ก๊ทธ๋จ ์คํ ๋จ๊ณ
ํ์ฑ์ ๋ง์น๊ณ ๋๋ฉด ํด๋น ๋ ๋ฒจ์ var๋ณ์์ ํจ๊ป ๋ณ์๊ฐ ์ ์๋ฉ๋๋ค. ์์ง ์ฝ๋ ๋ธ๋ก์ ์คํ๋์ง ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ ๋ชจ๋ var๋ณ์์ ํจ์ ๋ณ์๋ ๊ทธ๊ฒ๊ณผ ์ฐ๊ด๋ variable scope ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ก ์ถ๊ฐ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ณ์๋ช
๊ณผ ํจ์๋ช
์ ๋ณ๋๋ก ๊ตฌ๋ถํด์ ๊ด๋ฆฌํ์ง ์์ต๋๋ค. ๋์ผํ ์ด๋ฆ์ ๋ณ์ ๋๋ ํจ์๋ฅผ ์ ์ํ๋ฉด ์ด์ ์ ์ ์๋ ๋ด์ฉ์ ๋ฎ์ด์ฐ๊ฒ ๋ฉ๋๋ค.
1.2. Convention
์ฌ์ฉ ๋ชฉ์
1. ๊ณต๋ฐฑ๊ณผ ํญ์ ์์ด ์ฐ์ง ์๋๋ค.
2. {} ()๋ฑ ์์ญ ๋ฌธ์๋ ๊ฐํํ๋ค.
3. Minify ๋ฌธ์
4. Source map ์ฌ์ฉ
1.3. Primitive Data Type
1.3.1. ์ซ์
์ผ๋ฐ์ ์ธ ์๋ฏธ์ ์ซ์๋ฅผ ๋งํฉ๋๋ค. 10์ง์๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ 64-bit (8-bytes) ๋ก ๋์ด ์์ต๋๋ค. ํ๊ธฐ์์ผ๋ก๋ ์ ์(123), ์ค์(12.3), 8์ง์(0์ผ๋ก ์์ํ๋ ์ซ์, 0377), 16์ง์(0x๋ก ์์ํ๋ ์ซ์, 0x22)๋ฑ ๋ค์ํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง, ๋ด๋ถ์ ์ผ๋ก๋ ์ค์(floating-point value)๋ก ํด์๋ฉ๋๋ค.
1.3.2. Infinity
์ต๋ ์ซ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ๋ฅผ ์ํด Infinity ๋ผ๋ ๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋์ด ์์ต๋๋ค. 4์น์ฐ์ฐ์ ์ํ ๊ฒฐ๊ณผ๋ Infinity๋ก ๋์ต๋๋ค. (๋จ, 0 / Infinity = 0, Infinity * -1 = - Infinity) ์ซ์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. (typeof Infinity -> โnumberโ)
1.3.3. NaN(Not a number)
์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ซ์์ธ์ง ์๋์ง ๋ํ๋ด๋ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ํ NaN์์ฒด๋ ์ซ์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. (typeof NaN โnumberโ) ๋น๊ต์ฐ์ฐ์์๋ ํน์ดํ๊ฒ ๋์ํ๋๋ฐ, ์ด๋ค ์ซ์์๋ ๋น๊ต ์ฐ์ฐ์ ํ ์ ์์ ๋ฟ๋๋ฌ ์์ ๊ณผ๋ ๋น๊ต์ฐ์ฐ์ด ๋์ง ์์ต๋๋ค.( NaN == NaN, NaN == 1 ๋ชจ๋ false๊ฐ ๋์ต๋๋ค) ์ซ์ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด isNaN์ด๋ผ๋ ํจ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
1.3.4. ๋ฌธ์
๋ฌธ์์ด ์๋ฃํ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ ํ ์คํธ๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ฌธ์์ด์ ์ ๋์ฝ๋ ๋ฌธ์์ ๋์ด๋ก์ ๋ชจ๋ ๋ฌธ์์ด์ ๋ด๋ถ์ ์ผ๋ก ์ ๋์ฝ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ณดํต ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ด์ฉํด ์์ฑํ๋๋ฐ, ์์๋ฐ์ดํ(')๋ ํฐ๋ฐ์ดํ(") ์์ ํ ์คํธ๊ฐ ๋ค์ด ์์ผ๋ฉด ๋ฌธ์์ด์ด ๋ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. var str1 = String("12345"); // ์์ ๋ฌธ์์ด var str2 = new String("Hello world."); // String ๊ฐ์ฒด var str3 = str2.valueOf();// valueOf ๋ฉ์๋๋ฅผ ์ด์ฉํด String ๊ฐ์ฒด๋ฅผ ๊ทธ์ ์์ํ๋ ์์ ๋ฌธ์์ด๋ก ๋ณํ
Substring ๊ณผ substr์ ์ฐจ์ด์
ํน์ ๋ฌธ์
\n | ์ปค์๋ฅผ ๋ค์์ค๋ก ์ด๋ํฉ๋๋ค |
---|---|
\t | ์ปค์๋ฅผ ํญํค๋ฅผ ๋๋ฅธ๋งํผ ์ด๋ํฉ๋๋ค |
\b | ์ปค์๋ฅผ ์์ผ๋ก ํ์นธ ์ด๋ํฉ๋๋ค |
\f | ์ปค์๋ฅผ ๋ค์ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค |
\r | ์ปค์๋ฅผ ๊ทธ์ค์ ์ฒ์์ผ๋ก ์ด๋ํฉ๋๋ค |
\\ | \๋ฌธ์๋ฅผ ํ์ํฉ๋๋ค |
\' | ' ๋ฌธ์๋ฅผ ํ์ํฉ๋๋ค |
\n | " ๋ฌธ์๋ฅผ ํ์ํฉ๋๋ค |
1.3.5. Boolean
1.3.6. undefined,null
undefined๋ ๋ณ์ ์ ์ธ ์ ์ต์ด๋ก ํ ๋น๋๋ฉฐ โ๊ฐ์ด ํ ๋น๋ผ์ง ์์โ์ ๋ํ๋ด๊ธฐ ์ํด ํน๋ณํ ์ ์๋ ๊ฐ์
๋๋ค. ์ฆ, ๊ฐ์ด ํ ๋น๋์ง ์์ ๋ณ์, ํ ๋น๋์ง ์์ ํจ์ ๋งค๊ฐ๋ณ์ ๊ทธ๋ฆฌ๊ณ ํ ๋น๋์ง ์์ ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ undefined๋ก ์ด๊ธฐํ ๋ฉ๋๋ค. null์ โ๊ฐ์ฒด๊ฐ ์์โ์ ๋ํ๋ด๊ธฐ ์ํ ํน์ ๊ฐ์
๋๋ค. ์ฆ, ์ฝ๋๋ฅผ ํตํด ๋ช
์์ ์ผ๋ก ํ ๋นํด์ผ ํ๋ ๊ฐ์
๋๋ค.
-null์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํค์๋๋ก ์ ์๋์ด ์๊ณ , undefined๋ ๋ฃจํธ๊ฐ์ฒด(global object)์ ์์ฑ์ผ๋ก ์ ์๋์ด ์์ต๋๋ค. ๊ทธ๋์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ ์ํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค.
1.4. ์ฐ์ฐ์
1.4.1. ์ฆ๊ฐ, ๊ฐ์(++,--)
++
๋ฅผ ์ฆ๊ฐ ์ฐ์ฐ์, --
๋ฅผ ๊ฐ์์ฐ์ฌ์ ๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฅผ ์ด์ฉํด ์๋์ ๊ฐ์ด ์์ ์ถ์ฝํ ์ ์์ต๋๋ค.year = year + 1
--> year++
year = year - 1
--> year--
์ด ์ฐ์ฐ์ ์ ํํ ๋์์ ์ฐ์ฐ์์ ์์น์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ฐ, ์ฆ๊ฐ ์ฐ์ฐ์๋ฅผ ++year
์ฒ๋ผ ๋ณ์ ์์ ์ฌ์ฉํ๋ค๋ฉด ๋ณ์ ๊ฐ์ ๋จผ์ ์ฆ๊ฐ์ํค๊ณ ์ฆ๊ฐ๋ ๊ฐ์ ์ฐ์ฐ์ ์ต์ข
๊ฐ์ผ๋ก ๋ฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฆ๊ฐ ์ฐ์ฐ์์ year++
์ฒ๋ผ ๋ณ์์ ๋ค์ ์ฌ์ฉ๋๋ค๋ฉด ์ฆ๊ฐํ๊ธฐ ์ ์ ๊ฐ์ด ์ฐ์ฐ์ ์ฌ์ฉ๋ ๋ค์์ ๋ณ์์ ๊ฐ์ ์ฆ๊ฐํฉ๋๋ค. ์ฆ, ํผ ์ฐ์ฐ์ ๋ณ์์ ๊ฐ์ ์ฆ๊ฐ์ํค๊ธฐ๋ ํ์ง๋ง ์ฆ๊ฐ ์ ์ฉ์ ์ฐ์ฐ์์ ์์น์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
1.4.2. ๋น๊ต
๋น๊ต ์ฐ์ฐ์์๋ ==
(equal), ===
(identical)์ด ์์ต๋๋ค.
== | ํ์ ์ด ์๋ก ๋ค๋ฅธ๊ฒฝ์ฐ ๊ฐ์ ํ์ ์ผ๋ก ๋ณํํ ํ ๊ฐ์ ๋น๊ต | 1=='1' ==>true |
---|---|---|
=== | ํ์ ์ ๋ณํํ์ง ์๊ณ ํ์ ๊ณผ ๊ฐ์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํ | 1==='1' ==> false |
!= | ํ์ ์ ๋ณํํ ํ ํผ์ฐ์ฐ์์ ๊ฐ์ด ๊ฐ์ง ์์ผ๋ฉด true๋ฅผ ๋ฐํ | 1 != '1' ==> false |
!== | ํ์ ์ ๋ณํํ์ง ์์ ์ํ์์ ๊ฐ์ด ๊ฐ์ง ์๊ฑฐ๋ ํ์ ์ด ๋ค๋ฅด๋ฉด true | 1 !== '1' ==> true |
-๋ง์ฝ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฐธ์กฐ๊ฐ์ ๋น๊ตํ๋ค.
1.4.3. ๋ ผ๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์กฐ๊ฑด์์ ํ๊ฐํ ๊ฒฐ๊ณผ๊ฐ์ด 0 , โโ , null , undefined, NaN ๊ฐ์ ๊ฐ์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ์ฐธ์ ๋ฐํํ๋ค.
OR ์ฐ์ฐ์ (||)
์ฐ์ฐ์ โ||โ ์ ์ข์ธก ํผ ์ฐ์ฐ์๋ฅผ ํ๊ฐํด์ ์ฐธ์ผ๋ก ๋์ค๋ฉด ์ฐ์ธก ํผ ์ฐ์ฐ์๋ ํ๊ฐํ์ง ์๊ณ ์ข์ธก ํผ ์ฐ์ฐ์์ ์ต์ข ํ๊ฐ ๊ฐ์ ๋ฐํํ๋ค. ๋ง์ฝ ์ข์ธก ํผ ์ฐ์ฐ์๊ฐ ๊ฑฐ์ง์ผ๋ก ํ๊ฐ๋๋ฉด ์ฐ์ธก ํผ ์ฐ์ฐ์์ ์ต์ข ํ๊ฐ ๊ฐ์ ๊ทธ๋๋ก ๋ฐํํ๋ค.
AND ์ฐ์ฐ์(&&)
์์ชฝ์ ํผ ์ฐ์ฐ์์ ๊ฒฐ๊ณผ๊ฐ์ด ์ฐธ์ด ๋๋ ๊ฒฝ์ฐ์๋ง ๊ทธ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ผ๋ก ๋๋ค. OR ์ฐ์ฐ์์ ๋ฐ๋๋ก ์ข์ธก ํผ ์ฐ์ฐ์๋ฅผ ํ๊ฐํด์ ๊ฑฐ์ง์ผ๋ก ๋์ค๋ฉด ์ฐ์ธก ํผ ์ฐ์ฐ์๋ ํ๊ฐํ์ง ์๊ณ ์ข์ธก ํผ ์ฐ์ฐ์์ ์ต์ข ํ๊ฐ ๊ฐ์ ๋ฐํํ๋ค
๋ถ์ ์ฐ์ฐ์(!)
์ฐ์ฐ์ !๋ ํผ ์ฐ์ฐ์๋ฅผ ์ค๋ฅธ์ชฝ์ ํ๋๋ง ๊ฐ์ต๋๋ค. ์ด ์ฐ์ฐ์๋ ์ค๋ฅธ์ชฝ ํผ ์ฐ์ฐ์๋ฅผ ํ๊ฐํ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋์ ๊ฒฐ๊ณผ๋ true/false ๋ง ์กด์ฌํฉ๋๋ค.
1.5. ์ ์ด๋ฌธ
1.5.1. If
๊ธฐ์ด์ ์ธ ์ ์ด๋ฌธ์ผ๋ก if(์กฐ๊ฑด์)์ ์กฐ๊ฑด์์ด ์ฐธ์ ๋ฐํํ๋ฉด if์ ์ code block์ ๊ฑฐ์ง์ด๋ฉด else์ ์ code block์ ์คํํ๊ฒ ๋ฉ๋๋ค.
If(์กฐ๊ฑด์){
//if์ code block
} else{
//else์ code block
}
1.5.2. ? (์กฐ๊ฑด๋ฌธ ๊ฐ๊ฒฐ์)
if๋ฌธ์ ๊ฐ๊ฒฐํ๊ฒ ํํ ํ ์ ์์ต๋๋ค.(์กฐ๊ฑด์) ? ์1 : ์2
์คํ ๋ฌธ(์1,์2)์ ์ฝค๋ง(,)๋ฅผ ํตํด ์ฌ๋ฌ ๋ฌธ์ฅ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
์์ )
var age = 10;
var age_test = (age > 10) ? (alert('10์ด์ด์'), 'big') : (alert('10์ด ์ดํ'),'small');
alert(age_test);
1.5.3. Switch
๋๋ฌด ๋ง์ else if ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด switch๋ฅผ ์ด์ฉํด ์ค์ผ ์ ์์ต๋๋ค.
Switch(๋ณ์){
Case ์กฐ๊ฑด1:
//์กฐ๊ฑด1 code block
Break;
Case ์กฐ๊ฑด2:
//์กฐ๊ฑด2 code block
Break;
Case ์กฐ๊ฑด3:
//์กฐ๊ฑด3 code block
Break;
default:
//๊ทธ์ธ ์กฐ๊ฑด์ code block
breal;
}
Swich์์ ๋ณ์ ๋ถ๋ถ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ ๋ฌธ์ฅ์ด ์๋ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ํ๋ ํน์ ์กฐ๊ฑด์ case๋ฌธ์ ๋ฐฐ์นํ์ฌ ์คํํ๋๋ก ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ์นํ๋ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ์๋ default๊ตฌ๋ฌธ์ ์คํํ๋ฉฐ, default๋ ์๋ต๊ฐ๋ฅ ํฉ๋๋ค.
1.6. ๋ฐ๋ณต๋ฌธ
1.6.1. For
For(๋ณ์ ์ด๊ธฐํ;๋ฐ๋ณต ์ฌ๋ถ ํ
์คํธ;๋ณ์๊ฐ ๋ณํ){
//์คํ code block
}
๋ณ์ ์ด๊ธฐํ ๋ถ๋ถ์ด 1๋ฒ๋ง ์คํ๋๋ค๋ ๊ฒ์ ๋ค๋ฅธ ์ธ์ด์ ๊ฐ์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ฑ์ ๋ณ์๋ ํจ์๋จ์๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ for๋ฌธ ๋ฐ์์๋ ์ฌ์ฉ๊ฐ๋ฅ ํฉ๋๋ค. ์์ ์ค๋ช ํ ๊ฒ๊ณผ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ฑ ๋จ๊ณ์ ์คํ๋จ๊ณ๋ก ๋๋๊ณ , ๋ณ์๋ ํ์ฑ ๋จ๊ณ์ ์ ์๋ฉ๋๋ค.
1.6.2. For/in
For(๋ณ์ in ๊ฐ์ฒด){
//code block
}
โ๋ณ์โ์๋ var๋ฅผ ์ด์ฉํ ๋ณ์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ฉฐ, โ๊ฐ์ฒดโ์๋ ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ด ์ฌ ์ ์์ต๋๋ค.
1.6.3. While, do/while
์ผ๋ฐ์ ์ while, do/while๋ฌธ๊ณผ ๋์ผํฉ๋๋ค.
์ผ๋ฐ์ ์ while, do/while๋ฌธ๊ณผ ๋์ผํฉ๋๋ค.
While(์กฐ๊ฑด์){
//code block
}
Do{
//code block
} While(์กฐ๊ฑด์)
1.6.4. Try/catch/finally
ํ๋ก๊ทธ๋จ์ ์์ธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ try/catch ๋ฌธ์ ์ฌ์ฉํด ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
Try{
//์คํ ์ฝ๋
}Catch(err){
// ์์ธ์ฒ๋ฆฌ ์ฝ๋
}Finally{
// try ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ๋ ๋ฐ์ํ์ง ์๋ ํญ์ ์คํ๋๋ ์ฝ๋
// try ๊ตฌ๋ฌธ์์ return ๋ฌธ์ด ์ฌ์ฉ๋์ด๋ ๋ฌด์กฐ๊ฑด ์คํ
}
Catch๋ฌธ๊ณผ finally ๋ฌธ์ ํ์์ ๋ฐ๋ผ ์ฌ์ฉํด๋ ๋๊ณ ์ ํด๋ ๋๋ค.
2. ํจ์(Function)
ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ด ๊ฐ๋ฅ ํฉ๋๋ค.
- ํธ์ถ ๊ฐ๋ฅํ ๋ฃจํด์ผ๋ก์์ ํจ์
- ๊ฐ์ผ๋ก์์ ํจ์
- ์ธ์๋ก ์ ๋ฌ ๊ฐ๋ฅ
- ๋ณ์์ ํ ๋น ๊ฐ๋ฅ
- ๋ค๋ฅธ ํจ์์ ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ฐ์ฒด๋ก์์ ํจ์
2.1. ํจ์ ๋ชจ๋ธ๋ง(Function modeling)
ํ์ฑ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉด ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ํจ์๊ฐ ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ค๋ง, ์๋ ์ฌ์ฉ๋ โ๋ณ์ ์ค์ฝํโ, โ์คํ ์ฝ๋ ๋ธ๋กโ, โ๊ณต๊ฐ๋ณ์ ์์ญโ์ ๊ณต์์ ์ธ ์ฉ์ด๋ ์๋๊ณ , ๊ฐ๋ ์ค๋ช ์ ์ํด ์ ์ํ ์ด๋ฆ๋ค์ ๋๋ค.
Function add(x, y){
return x+y;
}
2.1.1. ๋ณ์ ์ค์ฝํ
๋ณ์ ์ค์ฝํ๋ ํจ์๊ฐ ์ ์๋ ๋ ์ฌ์ฉ๋ ๋ณ์๋ค์ด ์ ์๋ ์์ญ์ ๋งํฉ๋๋ค. ์ ์์ ํจ์์์ x,y ๋๊ฐ์ ๋ณ์๋ ํจ์๋ด๋ถ์์๋ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ณ์๋ช
์์ โ๋ฅผ ํ๊ธฐํ์์ต๋๋ค. Prototype์ ํจ์ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ +ํ๊ธฐ๋ฅผ ํ์๊ณ , prototype ์์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ๋ณ์ ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ์ธก์ ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
2.1.1. ์คํ์ฝ๋ ๋ธ๋ก
ํํ ์๊ณ ์๋ ํจ์์ ์คํ ์ฝ๋๊ฐ ๋ชจ์ฌ์๋ ์์ญ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๋ถ ์ฉ์ผ๋ก ์ ์๋ ๋ณ์๋ฅผ ์ด ์์ญ์์๋ง ์ฌ์ฉ๊ฐ๋ฅ ํฉ๋๋ค.
2.1.2. ๊ณต๊ฐ๋ณ์ ์์ญ
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ ๋ฐํ์์ ์ถ๊ฐ,์์ ,์ญ์ ๋ ์ ์์ต๋๋ค. ํจ์ ๋ํ ๊ฐ์ฒด๋ก์ ๋ฉค๋ฒ๊ฐ ๋์ ์ผ๋ก ์ถ๊ฐ๋ ์ ์๋๋ฐ, ์ด๋ฌํ ๋ฉค๋ฒ๋ค์ ๋ด๋ถ ๋ณ์๋ค๊ณผ ๋ค๋ฅธ ์์ญ์ ์ ์ฅ๋ฉ๋๋ค.
2.1.3. ํ๋กํ ํ์ ๊ฐ์ฒด
ํจ์์ ์์ฑ์๋ฅผ ๊ฐ๋ฆฌํค๋ constructor๋ณ์๊ฐ ์ ์๋์ด ์๊ณ , ํจ์๋ฅผ ํ์ฑํ๋ฉด์ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
2.2. Function ์ ์ธ
2.3. Function Object
function add(x, y){
/* ํ์ฑ๋จ๊ณ์์ ์ ์ */
return x + y;
}
var add = function (x, y) { return x + y; } /* ๋ฐํ์์ ํจ์๊ฐ ์ ์ */
Parameter
ํจ์์ ์ ์ธ ๋๋ ๊ตฌํ๋ถ์ ์๋ ๋ณ์
Argument
ํจ์๋ฅผ ํธ์ถํ ๋ ์ฃผ๋ ๋ณ์๋ ์์
Arguments Object
ํจ์ ํธ์ถ์ Argument๋ฅผ ์ ๋ฌํ๋ ๋ฐฐ์ด ํํ์ ๊ฐ์ฒด
-> ECMA Script ๋ช
์ธ์์๋ ๋ฐฐ์ด์ ํน์ง์ ๋ํ ๊ตฌํ์ ๊ฐ์ ํ์ง ์์
length Property ๋ฅผ ํตํด ์ธ์์ ๊ฐ์, arguments[i]๋ฅผ ํตํด i๋ฒ์งธ ์ธ์์ ์ ๊ทผ ๊ฐ๋ฅ
callee Property๋ ํ์ฌ ์คํ๋๊ณ ์๋ ํจ์๋ฅผ ๊ฐ๋ฆฌํด
Optional Arguments
ํจ์ Parameter๋ณด๋ค ์ ์ Argument๊ฐ ์ ๋ฌ๋๋ ๊ฒฝ์ฐ, ์ง์ ๋์ง ์๊ณ ๋จ์ ๊ฐ์ undefined
2.4. Anonymous(unnamed) Function
์ต๋ช
ํจ์(์ด๋ฆ์ด ์๋ ํจ์)
๋ค๋ฅธ ๋ณ์์ ํ ๋น, ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ ๊ฐ๋ฅ
2.5. Nested Function
ํจ์๋ ๋ค๋ฅธ ํจ์ ์์ ์ ์ํ ์ ์์
Function๋ฌธ์ผ๋ก ์ ์ ๋๋ ํจ์๋ ํจ์์ ์ต์์ ๋ ๋ฒจ์๋ง ์ ์ ํ ์ ์์
If/while ๊ฐ์ ๋ฌธ์ฅ ๋ธ๋ก ์์์ ์ ์ ํ ์ ์์
-> ECMA Script Spec์ผ๋ก๋ ๋ถ๊ฐ๋ฅ ํ์ง๋ง ์ค์ ๊ตฌํ์ฒด์์๋ ํ์ฉํ๊ณ ์์
ํจ์ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์์น ์ ์ฝ ์์
์ธ๋ถ์์๋ ๋ด๋ถ ๋ณ์์ ์ ๊ทผํ ์ ์์ง๋ง, ๋ด๋ถ ํจ์๋ ๋ด๋ถ ๋ณ์ ์ ๊ทผ ๊ฐ๋ฅ
3. ๋ณ์ ์ค์ฝํ
3.1. ๋ณ์ ๊ด๋ฆฌ
var a=1; | ๋ณ์ C๋ if ์์ ์ ์ธ๋์ด ์์ง๋ง 2๋ฅผ ๋ฆฌํด ํ๋ค. ๋ณ์ a๋ ์ ์ญ๋ณ์๋ก ์ ์ธ ๋๋ค. |
var a=1; | ๋ณ์ C๊ฐ ์ฌ์ฉ๋์์ง๋ง if ๋ฌธ ์์ var ๋ก ์ ์ธ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ c๋ ํ์ฑ ๋จ๊ณ๊ฐ ์๋๋ผ run ํ์์ ์ ์๋๋ค. ์ฆ, ํจ์ ๋ด๋ถ์์ ๋ณ์๋ฅผ ์ ์ํ๋๋ผ๋ Var๊ฐ ์์ด ๋ณ์๊ฐ ์ ์๋๋ฉด ๋ฐํ์์ ์ ์ญ ์ค์ฝํ์ ๋์ ์ผ๋ก ๋ณ์๋ฅผ ์ ์๋๋ค. ๋ฐ๋ผ์ f() ํจ์ ์ธ๋ถ์ฝ๋์์๋ ์ฌ์ฉํ ์ ์๋ ์ ์ญ๋ณ์๊ฐ ๋๋ค. |
3.2. Scope chain
ํจ์๊ฐ์ฒด๋ ์์ฑ๊ณผ์ ์์ ํจ์๊ตฌ๋ฌธ ๋ด์์ ์ ์ธ๋ ์ง์ญ๋ณ์๋ค์ Valiable Object ๋ผ๋ ๊ฐ์ฒด์ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ญ๊ฐ์ฒด(Global Object)์ Valiable Object ์ ์ฐ๊ฒฐ๋๋ค. ์ ์ญ๊ฐ์ฒด์ Valiable Object๋ ์ ์ญ๊ฐ์ฒด ์์ ์ด๋ค. ์ด๋ ์ด Valiable Object๋ค์ ๋ํ ์ฐ๊ฒฐ๋ค์ Scope Chain ์ผ๋ก ๊ด๋ฆฌํ๊ณ [[scope]]๋ฅผ ํตํด Scope Chain์ ์ฐธ์กฐํ์ฌ ํจ์๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ์ ํจ๋ฒ์๋ฅผ ์ค์ ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
var x = 1;
function foo() {
var y = 10;
return a+x;
}
3.3. Lexical
๋ ์์ปฌ(lexical)์ ์๋ฏธ๋ ์ฌ์ ์ ์ผ๋ก๋ "์ดํ"๋ผ๋ ์๋ฏธ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํ๋ก๊ทธ๋จ์ด ๊ตฌํ๋ "์ฝ๋"์ ๊ด๋ จ๋ผ ์์์ ์๋ฏธํ๋ค. ๋ณ์๋ฅผ ๊ฒ์ํ ๋ ํจ์๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ๊ทผ๊ฑฐ๋ก ํ๋จํ๋ ๊ฒ์ด ์๋๋ผ ํจ์๋ฅผ ์ ์ํ ์ฝ๋์ ๋ฌธ๋งฅ์ ๊ทผ๊ฑฐ๋ก ํ๋จํ๋ค๋ ๊ฒ์ด๋ค.
var x = "global";
var func = function(){
alert("x: " + x);
var x = "local";
alert("x: " + x);
};
func();
alert(x);
x: undefined
Quiz : ๋ง์ง๋ง alert(x); ์ ๊ฐ์?
Quiz : ์ฒ์ x ์ undefined ๊ฐ ์๋ global์ด ๋์ค๊ฒ ํ๋ ค๋ฉด?
3.4. Closer
ํด๋ก์ ๋ผ๋ ๊ฐ๋
์ ์๋ฐ์คํฌ๋ฆฝ์๋ ์๋ class์ ์ญํ ์ ๋์ ํด ๋น๊ณต๊ฐ ์์ฑ/๋ฉ์๋, ๊ณต๊ฐ ์์ฑ/๋ฉ์๋๋ฅผ ๊ตฌํํ ์ ์๋ ๊ทผ๊ฑฐ๋ฅผ ๋ง๋ จํ๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด์งํฅ์ ์ธ ํน์ง์ธ ์บก์ํ์ ์ ๋ณด ์๋์ ์ดํดํ๋ ค๋ฉด ํด๋ก์ ๋ฅผ ๋ฐ๋์ ์ดํดํด์ผ ํ๋ค.
์ ์ฝ๋๋ โ ๋ด๋ถ ํจ์๊ฐ ์ต๋ช
ํจ์๋ก ๋์ด outer์ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค. โกinner๋ outer์ ์คํ ํ๊ฒฝ์์ ์คํ๋๋ค. โขinner์์ ์ฌ์ฉํ๋ ๋ณ์ x๋ outer์ ๋ณ์ ์ค์ฝํ์ ์๋ค. ์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด var f = outer()์ ์ํด ํ์ฑ ๋จ๊ณ์์๋ outer์ ๋ด๋ถ์์ ์ ์๋๋ ์ต๋ช
ํจ์๊ฐ ์คํ ๋จ๊ณ์์๋ outer์ ์ธ๋ถ๋ก ์ ๋ฌ๋์ด ์คํ๋๋ค. ์คํ ํ๊ฒฝ์ ์๋ f๋ฅผ ํตํด outer๊ฐ ๋ฐํํ ์ต๋ช
ํจ์๊ฐ ํธ์ถ๋๋ฉด return ++x;์์ ์ฌ์ฉ๋ ๋ณ์ x๋ฅผ ์ด๋์์ ๊ฒ์ํ ๊น? ์๋ ์ ์๋ ๋ ์์ฑ๋ ์ต๋ช
ํจ์์ ๋ณ์ ์ค์ฝํ ๊ฐ์ฒด์์ ๊ฒ์ํ ๊น? ๋ต์ ๋ฐํ์์ ๋ณ์๋ ๋ ์์ปฌ ํ๊ฒฝ์ ๊ธฐ์ค์ผ๋ก ์ ์๋ ๋ณ์ ์ค์ฝํ ๋ฐ ์ฒด์ธ์์ ๊ฒ์ํ๋ค๋ ๊ฒ์ด๋ค. ํ๋ก๊ทธ๋จ ์คํ ์ ๋ณ์ ๊ฒ์์ ํด๋น ๋ฌธ์ฅ(return ++x)์ด ํฌํจ๋ ํจ์๊ฐ ์ ์๋ ๋ ์์ปฌ ํ๊ฒฝ์์์ ๋ณ์ ์ค์ฝํ ์ฒด์ธ์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ๋ด๋ถ ํจ์์์ ์ ์ธ๋ ๋ณ์๊ฐ ์๋๋ฉด์ ๋ด๋ถ ํจ์์์ ์ฌ์ฉํ๋ outer์ x๊ฐ์ ๋ณ์๋ฅผ ์์ ๋ณ์๋ผ๊ณ ํ๋ค. x๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๋ ์๊ธฐ๋ outer๊ฐ ๊ฒฐ์ ํ์ง ๋ชปํ๋ค. ์ด๋ฐ ์์ ๋ณ์๋ outer๊ฐ ์คํ๋๊ณ ์๋ ํ๊ฒฝ์ด '๋ซ๋(close)' ์ญํ ์ ํ๋ค. ์ฆ x์ ๊ฒฝ์ฐ๋ ๋ณ์ ์ค์ฝํ๊ฐ outer๊ฐ ์คํ๋๋ ํ๊ฒฝ์ผ๋ก๊น์ง ํ์ฅ๋๋ค. ์ธ๋ถํ๊ฒฝ์์ ๋ด๋ถ ํจ์์ ๋ํ ์ฐธ์กฐ f๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ด์ outer ํจ์๋ '์คํ ์ค' ์ํ๊ฐ ๋๋ค. ๋ฐ๋ผ์ ์์ ๋ณ์ x ๋ฐ ํด๋น ๋ณ์ ์ค์ฝํ ์ฒด์ธ ๊ด๊ณ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ณ์ ์ ์ง๋๋ค. ์ด์ฒ๋ผ outer ํธ์ถ์ด ์ข
๋ฃ๋๋๋ผ๋ outer์ ์ง์ญ ๋ณ์ ๋ฐ ๋ณ์ ์ค์ฝํ ๊ฐ์ฒด์ ์ฒด์ธ ๊ด๊ณ๋ฅผ ์ ์งํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ํด๋ก์ ๋ผ๊ณ ํ๋ค. ํจ์ ํธ์ถ์ด ์ข
๋ฃ๋๋๋ผ๋ ๊ทธ ํจ์์ ์ง์ญ๋ณ์ ๋ฐ ์ง์ญ๋ณ์ ์ฒด์ธ ๊ด๊ณ๋ฅผ ์ ์งํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ํด๋ก์ ๋ผ ํ๋ค.
4. ๊ฐ์ฒด
4.1. ๊ฐ์ฒด์์ฑ
4.1.1. New object๋ฅผ ์ด์ฉํ ์์ฑ
Object ์์ฑ์๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์์ฑ
var mySon = new Object();
๊ฐ์ฒด ์์ฑ ์ดํ, ๋ฉค๋ฒ ์ถ๊ฐ ๊ฐ๋ฅ
mySon.Name = "๋ฌ๋ด์ด"
mySon.Age = 8;
mySon.IncreaseAge = function (i) {this.Age + i;}
x: local
4.1.2. ๊ฐ์ฒด ๋ฆฌํฐ๋ด
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํด ๊ฐ์ฒด ์์ฑ
๊ฐ์ฒด์ ๊ตฌ์กฐ ์ ์ ๋ฐ ์์ฑ ๊ตฌ๋ฌธ์ ํตํฉ -> ์ฝ๋๊ฐ ๊ฐ๊ฒฐ, ๊ฐ๋
์ฑ ํฅ์
๋ด๋ถ ๊ตฌํ์ new Object๋ฅผ ์ํ ํ, ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๋์ผ
4.1.3. ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด
1. ์ผ๋ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ๋น์ทํ ๋ฌธ๋ฒ
class ํค์๋ ๋์ function ์ฌ์ฉ
2. new ํค์๋์ ํจ๊ป ์ฌ์ฉ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ญํ
- ๊ฐ์ฒด ์์ฑ์ ์ฌ์ฉ๋๋ ํจ์๋ฅผ ์์ฑ์ ๋ผ๊ณ ํจ
- new์ ํจ๊ป ํธ์ถ๋๋ ์์ฑ์๋ () ์ฐ์ฐ์ ์๋ต ๊ฐ๋ฅ ๏จ ๋งค๊ฐ ๋ณ์๋ undefined๋ก ์ค์
3. this ํค์๋๋ฅผ ์ฌ์ฉํด ๊ณต๊ฐ ์์ฑ์ ์ ์
this๋ก ์ ์๋ ๋ฉค๋ฒ(์ธ์คํด์ค ๋ฉค๋ฒ)๋ ์ธ์คํด์ค ๋ณ๋ก ์กด์ฌ
4.2. ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ํน์ง
5. ๊ฐ์ฒด ๋ฉค๋ฒ
5.1. ๊ฐ์ฒด ๋ฉค๋ฒ ๊ด๋ฆฌ
5.1.1. ๋ฉค๋ฒ ๊ตฌ๋ถ
๊ตฌ๋ถ | ๊ตฌํ | ์ค๋ช | |
---|---|---|---|
๋น๊ณต๊ฐ ๋ฉค๋ฒ | ๋น๊ณต๊ฐ ์์ฑ | var ๋ณ์ | ๊ฐ์ฒด ๋ด๋ถ์์ ์ ์ธ๋ ๋ณ์. ๋น๊ณต๊ฐ ํจ์์์๋ง ์ ๊ทผ ๊ฐ๋ฅ |
๋น๊ณต๊ฐ ๋ฉ์๋ | function f(){โฆ} | ๊ฐ์ฒด์ ์์ฑ์์ ์ธ๋ผ์ธ ๋ฐฉ์์ผ๋ก ์ ์๋, ์ด๋ฆ์ด ์๋ ํจ์ ๋๋ ์ต๋ช
ํจ์. ์์ฑ์ ๋ด๋ถ ์ฝ๋์์ ํธ์ถ ๊ฐ๋ฅ | |
์ธ์คํด์ค ๋ฉค๋ฒ | ์ธ์คํด์ค ์์ฑ | This.property = ๊ฐ; | ์ธ๋ถ์์ ์ธ์คํด์ค๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅObj.property; |
์ธ์คํด์ค ๋ฉ์๋ | This.method = function(){โฆ.} | ์ธ๋ถ์์ ์ธ์คํด์ค๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅObj.method() | |
ํ๋กํ ํ์ ๋ฉค๋ฒ | ํ๋กํ ํ์ ์์ฑ | ์์ฑ์.prototype.property = ๊ฐ; | ์ธ๋ถ์์ ์์ฑ์ ๋๋ ์ธ์คํด์ค๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ ์์ฑ์.prototype.method(); |
ํ๋กํ ํ์ ๋ฉ์๋ | ์์ฑ์.prototype.method = function(){โฆ}; | ์ธ๋ถ์์ ์์ฑ์ ๋๋ ์ธ์คํด์ค๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ์์ฑ์.prototype.method(); | |
์์ฑ์ ๋ฉค๋ฒ | ์์ฑ์ ์์ฑ | ์์ฑ์.property = ๊ฐ; | ์ธ๋ถ์์ ์์ฑ์๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ์์ฑ์.property; |
์์ฑ์ ๋ฉ์๋ | ์์ฑ์.method = function(){โฆ} | ์ธ๋ถ์์ ์์ฑ์๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ์์ฑ์.mehtod(); |
5.1.2. ์ฐ์ ๋ฐฐ์ด
๊ฐ์ฒด ๋ณ๋ก ์์ ์๊ฒ ์ํ ๋ฉค๋ฒ๋ฅผ ๊ด๋ฆฌํ๋ ๋ด๋ถ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋ค. ๊ฐ์ฒด์ ๋ฉค๋ฒ(์์ฑ,๋ฉ์๋)๋ (ํค,๊ฐ)์ ์์ผ๋ก ๊ตฌ์ฑ๋ ์งํฉ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ฉค๋ฒ๋ ์ ๋ ฌ๋ผ ์์ง ์๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ๊ฐ์ฅ ์ ํฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ํด์๊ฐ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ํด์ ๊ตฌ์กฐ์ ์ผ์ข ์ธ ์ฐ์ ๋ฐฐ์ด(associative array)๋ผ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
5.1.3. ๋ฉค๋ฒ ์ถ๊ฐ, ์ ๊ฑฐ, ๋์ฒด
์ฐ์ ๋ฐฐ์ด์ ๋ ๋ค๋ฅธ ํน์ง ์ค ํ๋๋ ๋์ ์ผ๋ก ํด๋น ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฐ ํน์ง์ ๊ทผ๊ฑฐ๋ก ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ ์๋ ๋ฐํ์์๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐ ํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ค.
var obj = new Object();
obj.propertyA = new date(); //โpropertyAโ ์์ฑ ์ถ๊ฐ
delete obj.propertyB; // โpropertyBโ ์์ฑ ์ ๊ฑฐ
5.1.4. ๋ฆฌํ๋ ์
๋ณ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํด์ ์ต์ข
๊ฒฐ๊ณผ๊ฐ์ ์ป๋ ๊ณผ์ ์ ๋ชจ๋ ๋ฐํ์์ ์ผ์ด๋๋ค. ์ด๋ ๋ค ๋ณด๋ mySon ์ ์์ฑํ ํ์
์ ๋ํ์ ๋ณด๊ฐ ์ฌ์ ์ ํ์ํ ๊ฒ์ ์๋๋ค. ์๋ฅผ ๋ค์ด Person์ด๋ผ๋ ํ์
์ด ์ ์๋ผ ์๊ณ Person์ด ์ด๋ค ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๊ทธ ๋ฉค๋ฒ๋ ์ด๋ค ๊ตฌ์กฐ๋ก ๋ผ ์๋์ง ๋ฑ์ ๋ํ ์ ๋ณด๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์๊ฒ๋ ํ์ํ์ง ์๋ค. mySon ์ด ์ด๋ค ํ์
์ผ๋ก ์์ฑ ๋๋ ํ์ฌ ์ฝ๋๋ฅผ ์คํ ํ๋ ๋ฐ๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๋ค. ๊ทธ๋ฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ฐํ์์ด๋ผ๋ ๋ณ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ด ์ด๋ค ํ์
์ธ์ง์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ ๋๋ ์๋ค. ์ด์ฒ๋ผ ํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์
์ ์ถ์ ํ๋ ๊ณผ์ ์ ๋ฆฌํ๋ ์
(reflection)์ด๋ผ๊ณ ํ๋ค.
5.2. Prototype, constructor, Instance
์์ ๊ฐ์ ์์ ์์ ๊ฐ๊ฐ์ ์ฐธ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์ฑ์ ๊ฐ์ฒด, ํ๋กํ ํ์
๊ฐ์ฒด ๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค๋ ๊ตฌ๋ถ๋์ด์ผ ํ๋ค. ์์ฑ์ , ํ๋กํ ํ์
๊ฐ์ฒด๋ ํจ์๋ฅผ ์ ์ํ๋ฉด ํจ๊ป ์ ์๋๋ ๊ฐ์ฒด์ด๊ณ ์ธ์คํด์ค๋ ์์ฑ์ ํด์ ์ป๊ฒ ๋๋ ๊ฐ์ฒด์ด๋ค.
์์ฑ์, ํ๋กํ ํ์
๊ฐ์ฒด, ์ธ์คํด์ค๋ ๊ตฌ๋ถ๋ผ์ผ ํ๋ค.
5.2.1. Prototype
์์ฑ์์ ํ๋กํ ํ์ ๊ฐ์ฒด์ ์ ๊ทผํด ๋ฉค๋ฒ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ค๋ฉด ๋ฐ๋์ ์์ฑ์์ prototype ์์ฑ์ ์ด์ฉํด์ผ ํ๋ค. ํ๋กํ ํ์ ๊ฐ์ฒด๋ ์์ฑ์๋ณ๋ก ํ๋๋ง ์ ์ ๋๋ฏ๋ก ํ๋กํ ํ์ ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๋ฐ ์์ฑ์๋ฅผ ์ด์ฉํ๊ณ ์๋ค. ์ธ์คํด์ค์์ ์ง์ ํ๋กํ ํ์ ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์๋ค. ์ค์ํ ๊ฒ์ ์ธ์คํด์ค๋ฅผ ํตํด์ ์์ฑ์๋ณ๋ก ์ ์๋๋ ํ๋กํ ํ์ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
5.2.2. Constructor
ํจ์๋ฅผ ์ ์ํ๋ฉด ํ๋กํ ํ์
๊ฐ์ฒด๊ฐ ์ ์๋๊ณ ๊ทธ ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ก constructor๊ฐ ์๋ค๊ณ ํ๋ค. Constructor ์์ฑ์ ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ํ๋ธ๋ค. ์ด ํ๋กํ ํ์
๊ฐ์ฒด์ constructor ์์ฑ์ ์์์ ํตํด ์ธ์คํด์ค์์ ๋ค์๊ณผ ๊ฐ์ด ์ ๊ทผํ ์ ์๋ค.
-> ์ธ์คํด์ค.constructor
Person ์์ ์ ๊ฒฝ์ฐ mySon.constructor๊ฐ์ Person์ ๊ฐ๋ฆฌํค๋ฏ๋ก ๋ค์ ํํ์ ์ฐธ์ด ๋๋ค. mySon.constructor == Person -> true ๋ฐํ
mySon.constructor == Person.prototype.constructor -> true ๋ฐํ
mySon.constructor == Person -> true ๋ฐํ
Constructor์์ฑ์ ๋จ์ํ ํจ์๋ช
์ ๋ํ๋ด๋ ๊ฒ์ด ์๋๋ผ ํจ์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ์ด๋ค. Constructor ํ๋กํ ํ์
์์ฑ์ด ์์ฑ์ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ์ด๋ฏ๋ก ์ด ๊ฐ์ ํตํด ํจ์๋ฅผ ํธ์ถ ํ ์๋ ์๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์๋ ์๋ค.//constructor ์์ฑ์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑ
var myGrandSon = new mySon.constructor(โ์๋ด์ดโ); //constructor ๋ ์์ฑ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ๊ฐ
myGrandSon.name; //โ์๋ด์ดโ ์ถ๋ ฅ
5.3. ๋ฉค๋ฒ ์ ๊ทผ
์ผ๋ฐ์ ์ธ ๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ๋ฉค๋ฒ์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๊ธฐ ์ํด public, private ๊ฐ์ ํ์ ์๋ฅผ ์ ๊ณตํ๋ค. ๊ทธ๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด์ ๊ด๋ จ๋ ํน๋ณํ ํค์๋๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. ์๋ฐ์คํฌ๋ฆฝ์์๋ ๊ณต๊ฐ ์์ฑ์ โ๊ฐ์ ์ง์ ๊ฐ์ง๊ณ ์๋ ๋ณ์โ์ ๊ฐ๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ์์ฑ์ ํตํด ๊ทธ๋๋ก ๋ ธ์ถํ๋ ๊ฒ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝ์์ ์ด๋ฌํ ์ ๊ทผ ์ ์ด๋ฅผ ํ๊ธฐ ์ํด์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌํํด์ผ ํ๋ค.
5.3.1. ๋น๊ณต๊ฐ ๋ฉค๋ฒ ๊ตฌํ
๊ฐ์ฒด์ ์ํ ๊ฐ์ผ๋ก๋ ๋ด๋ถ์ ์ง์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์ธ๋ถ์ ์ ๊ทผ ๋ฉ์๋๋ก๋ ๊ณต๊ฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋, ๊ณต๊ฐ ๋ฉ์๋๋ ์ง์ญ๋ณ์์ ์ ๊ทผํ๋ ๋ด๋ถ ํจ์๋ฅผ ์ ์ํด์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ์ํ ๊ฐ๊ณผ ๊ณต๊ฐ๋ ์ธ๋ถ ๋ฉ์๋ ์ฌ์ด์ ๋ด๋ถ ํจ์๊ฐ ์กด์ฌ ํ๋ ๊ตฌ์กฐ๊ฐ ๋๋ค.
5.3.2. ํด๋ก์ ธ ์ธ์คํด์ค
๋น๊ณต๊ฐ ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ค.
outer()๋ฅผ ํธ์ถํด์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ o1์ ํ ๋นํ๋ค. public01์ ํธ์ถํด์ ๊ฐ์ 1 ์ฆ๊ฐ์๋ฉด public02 ๋ฅผ ํธ์ถ๋ ๋ ์ด์ ์ ์ฆ๊ฐ๋ ๊ฐ์ด ์ ์ง๋์ด ๋๋ฒ์งธ ํธ์ถ์ ์์๊ฐ์ด ๋๋ค. Outerํจ์ ํธ์ถ์ด ์ข
๋ฃ ๋๋ ๋ด๋ถ ๋ณ์ ์ค์ฝํ ๊ฐ์ฒด๋ ๊ทธ๋๋ก ์ ์ง๋๋ ํด๋ก์ ์ ์์ฑ์ ๊ทธ๋๋ก ์ด์ฉํ๊ณ ์๋ค.
๋ค์ ํ๋ฒ outer()๋ฅผ ํธ์ถํด์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ o2์ ํ ๋นํ ํ public01, public02๋ฅผ ํธ์ถํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ด์ ๋ณ์ _x๊ฐ ์๋กญ๊ฒ ์ด๊ธฐํ ๋๋ค๋ ์ฌ์ค๋ก ์์ ํด๋ก์ ์๋ ๋ค๋ฅธ ๋ซํ ํ๊ฒฝ์ ๊ฐ์ง ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋์์ ์ ์ ์๋ค.
ํด๋ก์ ๋ฅผ ํธ์ถํ ๋๋ง๋ค ์๋ก์ด ํด๋ก์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค. ์๋ก์ด ํด๋ก์ ์ธ์คํด์ค๋ ๋ด๋ถ ์ํ๊ฐ ์ด๊ธฐํ๋ ์๋ก์ด ๋ซํ ํ๊ฒฝ์ ๊ฐ์ง๋ค.
6. ์์
6.1. ํจ์์ ๊ฐ์ฒด
์ด ๋ฌธ์์ Object, Function ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ ๊ฐ์ฒด Object, Function์ ์๋ฏธ ์ด์ ๊ตฌ๋ถํ๊ธฐ ์ํด ํจ์/์์ฑ์/๊ฐ์ฒด๋ก ์ดํ๋ฅผ ๊ตฌ๋ถํจ.
6.1.1. ๊ฐ์ฒด ์์ฑ๊ณผ์
6.1.2. this
6.2. ์๋ฐ์คํฌ๋ฆฝํธ ์์
6.2.1. ํ๋กํ ํ์ ๋ฉค๋ฒ ์์
6.2.2. ํ๋กํ ํ์ ์ฒด์ธ
6.2.3. Object ๋ฉค๋ฒ
Object์์ฑ์์ ์ ์๋ ๋ฉค๋ฒ ๊ฐ์ด๋ฐ ์ค์ํ ๊ฒ์ ๋ฐ๋ก ๋ชจ๋ ์์ฑ์๊ฐ ๊ฐ์ง๊ณ ์๋ prototype์์ฑ์ด๋ค. Object.prototype ๏จ Object ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
์์ฑ์์๋ ๋ฉ์๋ ๋ฉค๋ฒ๋ ์ ์๋ ์ ์๋๋ฐ, ์์ธํ ๋์ฉ์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ค.
https://developer.mozilla.org/en/Javascript/Reference/Global_Objects/Object
obj.constructor | Object ๊ฐ์ฒด obj์ ์์ฑ์์ ๋ํ ์ฐธ์กฐ |
---|---|
obj.hasOwnProperty(โ๋ฉค๋ฒ๋ช โ) | obj์ ์ธ์คํด์ค ๋ฉค๋ฒ ํ์ธ, ์ง์ ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ฑฐ๋ ์์๋ฐ์ ๊ฒฝ์ฐ false |
obj.isPrototypeOf(obj1) | obj๊ฐ obj1์ ํ๋กํ ํ์ ์ด๋ฉด true |
obj.toString() | ํ์ฌ์ ์ธ์คํด์ค๋ฅผ ๋ํํ๋ ๋ฌธ์์ด ๋ฐํ Object์ ์ธ์คํด์ค์ธ ๊ฒฝ์ฐ, โ[object Object]โ๋ฐํ |
obj.valueOf() | obj๊ฐ Number, String, Boolean ๊ฐ์ฒด๋ฉด ํด๋น ์์๊ฐ์, ์์๊ฐ์ด ์์ผ๋ฉด [object Object] ๋ฐํ |
6.3. ๋ฆฌํ๋ ์
๋ฐํ์์ ๊ฐ์ฒด์ ๊ฐ ํ์ ๊ณผ ๋ฉค๋ฒ์ ๊ตฌ์กฐ๋ฅผ ๋ฐํ๋ ์์
'์น ์ฝ๋ฉ > javascrip' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ต์ ํ #1 : ์ฝ๋ ์คํ์ผ (0) | 2017.03.21 |
---|---|
๋ธ๋ผ์ฐ์ ๋ ๋๋ง - ๋ฆฌํ๋ก์ฐ(Reflow)์ ๋ฆฌํ์ธํธ(Repaint) (0) | 2017.03.21 |
์ดํํฐ๋ธ ์๋ฐ์คํฌ๋ฆฝํธ (๋ฐ์ด๋น๋ ํ๋จผ) (0) | 2015.08.26 |
[์๋ฐ์คํฌ๋ฆฝํธ] ์๋ฃ๊ตฌ์กฐ ๋ชจ์ (0) | 2015.08.26 |
[์๋ฐ์คํฌ๋ฆฝํธ] JavaScript : FullScreen API (0) | 2015.08.26 |
- Total
- Today
- Yesterday
- W3Schools (W3์ค์ฟจ)
- ์ํ์ฝ๋ฉ
- ์จ์๋ก๊ทธ
- ์น์ ์ฌ๋ํ๋ ์ฌ๋๋ค
- ์์ฏ๋ท์ปด
- Create a new fiddle - JSFiddle
- ThemeForest
- dribbble(๋์์ธ๊ด๋ จ)
- XDSoft plugins(์ ์ด์ฟผ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ค)
- Free jQuery Plugins and Tutori…
- comfytube: relax (์ฌ์ฆ์์ )
- ์ข์ถฉ์ฐ๋ ์นํผ๋ธ๋ฆฌ์ ์ผ๊ธฐ
- Sensio Arbor
- ์น๋์์ธ ํฌํ ์ต
- ๊ทธ๋ ๊ณ ๊ทธ๋ฐ ์ด์ผ๊ธฐ
- ๊ณต๊ตฐ ๊ณต๊ฐ
- Itnamu์ ํผ์๋๊ธฐ
- ์นํผ๋ธ๋ฆฌ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ&HTML
- ๋ก๋ฉ์ด๋ฏธ์ง
- jquery๋ก๋ฉ
- ์ฌ๋ฆฌ๋ธ์ ์ธ์ผ
- 6์ ์ธ์ผ
- ์นดํ24์ผํ๋ชฐ ๋ชจ๋ฐ์ผ
- ์กฐํ๋ก๋ฉ
- ๋ผ๋์ค๋ฒํผ์ฒดํฌ
- ์นดํ24๋ชจ๋ฐ์ผ
- ์ ๋ ํธ๋ฐ์ค์ฒดํฌ
- Ajax๋ก๋ฉ
- ์นดํ24์ผํ๋ชฐ
- ์ฌ๋ฆฌ๋ธ์ 6์ ์ธ์ผ
- ์ด๋ฐ๋์ผ์ด
- ํด๋ฆฌ์ค
- ์นดํ24์ผํ๋ชฐ ์คํจ
- ์ ์ด์ฟผ๋ฆฌ ๋ก๋ฉ
- ์ฌ๋ฆฌ๋ธ์
- ์นดํ24๋ชจ๋ฐ์ผ์นดํ
- Mac
- ์นดํ24 ๋ชจ๋ฐ์ผ
- ํ ์คํธ์์์ฒดํฌ
- ์นดํ24
- ์นดํ24 ์คํจ
- ์นดํ24์ผํ๋ชฐ๋ชจ๋ฐ์ผ
- ๋ฅํฐ์ง
- Ajax
- ๊ตฌ๊ธ์ง๋
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |