ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

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์˜ ์ฐจ์ด์ 

๋‘ ํ•จ์ˆ˜ ๋ชจ๋‘ ๋ฌธ์ž์—ด์ค‘ ์ผ์ •๋ถ€๋ถ„์„ ๋ฐœ์ทจํ•˜๋Š” ํ•จ์ˆ˜

1. tring.substring(start,end) : ๋ฌธ์ž์—ด์„ ๊ฐ€์ ธ์˜ฌ ์‹œ์ž‘์œ„์น˜์™€ ์ข…๋ฃŒ ์œ„์น˜
2.string.substr(start,length) : ๋ฌธ์ž์—ด์„ ๊ฐ€์ ธ์˜ฌ ์‹œ์ž‘์œ„์น˜์™€ ๊ฐ€์ ธ์˜ฌ ๋ฌธ์ž์˜ ๊ธธ์ด

ํŠน์ˆ˜ ๋ฌธ์ž

 

ํŠน์ˆ˜๋ฌธ์ž์— ๊ด€ํ•œ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.
\n์ปค์„œ๋ฅผ ๋‹ค์Œ์ค„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค
\t์ปค์„œ๋ฅผ ํƒญํ‚ค๋ฅผ ๋ˆ„๋ฅธ๋งŒํผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค
\b์ปค์„œ๋ฅผ ์•ž์œผ๋กœ ํ•œ์นธ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค
\f์ปค์„œ๋ฅผ ๋‹ค์ŒํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค
\r์ปค์„œ๋ฅผ ๊ทธ์ค„์˜ ์ฒ˜์Œ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค
\\\๋ฌธ์ž๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
\'' ๋ฌธ์ž๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
\n" ๋ฌธ์ž๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค

 

1.3.5. Boolean

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ถˆ๋ฆฐ(boolean) ์ž๋ฃŒํ˜•์—๋Š” ์ฐธ(true)๊ณผ ๊ฑฐ์ง“(false)๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๊ฐ’๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ๋ถˆ๋ฆฐ ๊ฐ’์€ ๋น„๊ต์˜ ๊ฒฐ๊ณผ์— ํ•ด๋‹นํ•˜๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ œ์–ด ๊ตฌ์กฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
1. ์ˆซ์ž ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋ฉด ์ฐธ์€ ์ˆซ์ž 1๋กœ, ๊ฑฐ์ง“์€ ์ˆซ์ž 0์œผ๋กœ ๋ณ€ํ™˜
2. ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋ฉด ์ฐธ์€ "true"๋ผ๋Š” ๋ฌธ์ž์—ด๋กœ, ๊ฑฐ์ง“์€ "false"๋ผ๋Š” ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

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
!==ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ฐ’์ด ๊ฐ™์ง€ ์•Š๊ฑฐ๋‚˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด true1 !== '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์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Copy
If(์กฐ๊ฑด์‹){
//if์ ˆ code block
} else{
//else์ ˆ code block
}

1.5.2. ? (์กฐ๊ฑด๋ฌธ ๊ฐ„๊ฒฐ์‹)

if๋ฌธ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(์กฐ๊ฑด์‹) ? ์‹1 : ์‹2
์‹คํ–‰ ๋ฌธ(์‹1,์‹2)์€ ์ฝค๋งˆ(,)๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ์ œ)

Copy
var age = 10;
var age_test = (age > 10) ? (alert('10์‚ด์ด์ƒ'), 'big') : (alert('10์‚ด ์ดํ•˜'),'small');
alert(age_test);

1.5.3. Switch

๋„ˆ๋ฌด ๋งŽ์€ else if ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด switch๋ฅผ ์ด์šฉํ•ด ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Copy
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

Copy
For(๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”;๋ฐ˜๋ณต ์—ฌ๋ถ€ ํ…Œ์ŠคํŠธ;๋ณ€์ˆ˜๊ฐ’ ๋ณ€ํ™”){
	//์‹คํ–‰ code block
}

๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„์ด 1๋ฒˆ๋งŒ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฐ™์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์„ฑ์ƒ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— for๋ฌธ ๋ฐ–์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. ์•ž์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํŒŒ์‹ฑ ๋‹จ๊ณ„์™€ ์‹คํ–‰๋‹จ๊ณ„๋กœ ๋‚˜๋‰˜๊ณ , ๋ณ€์ˆ˜๋Š” ํŒŒ์‹ฑ ๋‹จ๊ณ„์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.

1.6.2. For/in

Copy
For(๋ณ€์ˆ˜ in ๊ฐ์ฒด){
	//code block
}

โ€˜๋ณ€์ˆ˜โ€™์—๋Š” var๋ฅผ ์ด์šฉํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, โ€˜๊ฐ์ฒดโ€™์—๋Š” ๊ฐœ์ฒด ๋˜๋Š” ๋ฐฐ์—ด์ด ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.6.3. While, do/while

์ผ๋ฐ˜์ ์€ while, do/while๋ฌธ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

Copy
์ผ๋ฐ˜์ ์€ while, do/while๋ฌธ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
While(์กฐ๊ฑด์‹){
	//code block
}
Do{
	//code block
} While(์กฐ๊ฑด์‹)

1.6.4. Try/catch/finally

ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ try/catch ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Copy
Try{ 
//์‹คํ–‰ ์ฝ”๋“œ
}Catch(err){ 
// ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ฝ”๋“œ
}Finally{
// try ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋“  ๋ฐœ์ƒํ•˜์ง€ ์•Š๋“  ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ
// try ๊ตฌ๋ฌธ์—์„œ return ๋ฌธ์ด ์‚ฌ์šฉ๋˜์–ด๋„ ๋ฌด์กฐ๊ฑด ์‹คํ–‰
}

Catch๋ฌธ๊ณผ finally ๋ฌธ์€ ํ•„์š”์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•ด๋„ ๋˜๊ณ  ์•ˆ ํ•ด๋„ ๋œ๋‹ค.

2. ํ•จ์ˆ˜(Function)

ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์ด ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

- ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ๋ฃจํ‹ด์œผ๋กœ์„œ์˜ ํ•จ์ˆ˜

- ๊ฐ’์œผ๋กœ์„œ์˜ ํ•จ์ˆ˜

- ์ธ์ž๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅ

- ๋ณ€์ˆ˜์— ํ• ๋‹น ๊ฐ€๋Šฅ

- ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- ๊ฐ์ฒด๋กœ์„œ์˜ ํ•จ์ˆ˜

2.1. ํ•จ์ˆ˜ ๋ชจ๋ธ๋ง(Function modeling)

ํŒŒ์‹ฑ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉด ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ํ•จ์ˆ˜๊ฐ€ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์•„๋ž˜ ์‚ฌ์šฉ๋œ โ€˜๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„โ€™, โ€˜์‹คํ–‰ ์ฝ”๋“œ ๋ธ”๋กโ€™, โ€˜๊ณต๊ฐœ๋ณ€์ˆ˜ ์˜์—ญโ€™์€ ๊ณต์‹์ ์ธ ์šฉ์–ด๋Š” ์•„๋‹ˆ๊ณ , ๊ฐœ๋… ์„ค๋ช…์„ ์œ„ํ•ด ์ •์˜ํ•œ ์ด๋ฆ„๋“ค์ž…๋‹ˆ๋‹ค.

Copy
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

ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด ์ฒ˜๋Ÿผ ์•„๋ž˜ ์šฉ๋„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
1. ๋ณ€์ˆ˜์— ํ• ๋‹น
2. ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์ธ์ž ๋˜๋Š” ๋ฐ˜ํ™˜๊ฐ’
Copy
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์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ ์‹ค์ œ ๊ตฌํ˜„์ฒด์—์„œ๋Š” ํ—ˆ์šฉํ•˜๊ณ  ์žˆ์Œ
ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์œ„์น˜ ์ œ์•ฝ ์—†์Œ
์™ธ๋ถ€์—์„œ๋Š” ๋‚ด๋ถ€ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์ง€๋งŒ, ๋‚ด๋ถ€ ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ

Copy
 

3. ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํŠน์ง•์ ์ธ 3๊ฐ€์ง€ ๋ถ€๋ถ„

1. ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
2. ์‹คํ–‰ ์‹œ์˜ ๋ณ€์ˆ˜ ๊ฒ€์ƒ‰์€ ๋ ‰์‹œ์ปฌ ์˜์—ญ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
3. ์‹คํ–‰ ์‹œ์˜ ๋ณ€์ˆ˜ ๊ฒ€์ƒ‰์€ ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ์ด์šฉํ•œ๋‹ค.

3.1. ๋ณ€์ˆ˜ ๊ด€๋ฆฌ

์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜์˜ ์˜์—ญ์„ ๊ฒฐ์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด for๋ฌธ์˜ ์ฝ”๋“œ ๋ธ”๋ก๋‚ด๋ถ€์—์„œ ์ •์˜๋œ ๋ณ€์ˆ˜๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ์ •์˜ํ•œ๋‹ค. ์ด๊ฒƒ์€ ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

๋ณ€์ˆ˜๊ด€๋ฆฌ์— ๊ด€ํ•œ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.
var a=1;
furnction f(){
if (true){ var c = 2 ;}
return c;
}
f() -> 2๋ฐ˜ํ™˜
๋ณ€์ˆ˜ C๋Š” if ์•ˆ์— ์„ ์–ธ๋˜์–ด ์žˆ์ง€๋งŒ 2๋ฅผ ๋ฆฌํ„ด ํ•œ๋‹ค. ๋ณ€์ˆ˜ a๋Š” ์ „์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธ ๋œ๋‹ค.
var a=1;
furnction f(){
if (true){ c = 2 ;}
return c
}
f() -> 2๋ฐ˜ํ™˜
Alert(c);
๋ณ€์ˆ˜ 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์„ ์ฐธ์กฐํ•˜์—ฌ ํ•จ์ˆ˜๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ์œ ํšจ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Copy
var x = 1;
function foo() {
    var y = 10;
    return a+x;
}

3.3. Lexical

๋ ‰์‹œ์ปฌ(lexical)์˜ ์˜๋ฏธ๋Š” ์‚ฌ์ „์ „์œผ๋กœ๋Š” "์–ดํœ˜"๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๊ตฌํ˜„๋œ "์ฝ”๋“œ"์™€ ๊ด€๋ จ๋ผ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ๊ทผ๊ฑฐ๋กœ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ์„ ๊ทผ๊ฑฐ๋กœ ํŒ๋‹จํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Copy
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. ๊ฐ์ฒด์ƒ์„ฑ

Copy
 

4.1.1. New object๋ฅผ ์ด์šฉํ•œ ์ƒ์„ฑ

Object ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

Copy
var mySon = new Object();

๊ฐ์ฒด ์ƒ์„ฑ ์ดํ›„, ๋ฉค๋ฒ„ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

Copy
mySon.Name = "๋‹ฌ๋ด‰์ด"
mySon.Age = 8;
mySon.IncreaseAge = function (i) {this.Age + i;}
x: local

4.1.2. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด ์ƒ์„ฑ

Copy
 

๊ฐ์ฒด์˜ ๊ตฌ์กฐ ์ •์˜ ๋ฐ ์ƒ์„ฑ ๊ตฌ๋ฌธ์„ ํ†ตํ•ฉ -> ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐ, ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ
๋‚ด๋ถ€ ๊ตฌํ˜„์€ new Object๋ฅผ ์ˆ˜ํ–‰ ํ›„, ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผ

4.1.3. ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด

1. ์ผ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์™€ ๋น„์Šทํ•œ ๋ฌธ๋ฒ•

class ํ‚ค์›Œ๋“œ ๋Œ€์‹  function ์‚ฌ์šฉ

Copy
 

2. new ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• 

- ๊ฐ์ฒด ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑ์ž ๋ผ๊ณ  ํ•จ

- new์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜๋Š” ์ƒ์„ฑ์ž๋Š” () ์—ฐ์‚ฐ์ž ์ƒ๋žต ๊ฐ€๋Šฅ ๏ƒจ ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” undefined๋กœ ์„ค์ •

3. this ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ณต๊ฐœ ์†์„ฑ์„ ์ •์˜

this๋กœ ์ •์˜๋œ ๋ฉค๋ฒ„(์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„)๋Š” ์ธ์Šคํ„ด์Šค ๋ณ„๋กœ ์กด์žฌ

4.2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์  ํŠน์ง•




1. ๊ฐ์ฒด(Object)
2. ํด๋ž˜์Šค(Class)
3. ์บก์Šํ™”(Encapsulation)
4. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ/์†์„ฑ์€ public, ๊ทธ๋Ÿฌ๋‚˜ private๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
5. ์ง‘ํ•ฉ(Aggregation, Composition)
6. ์ƒ์†(Inheritance) : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†์œผ๋‚˜, prototype์„ ์ด์šฉํ•ด ๊ฐ์ฒด ์ฐจ์›์˜ ์ƒ์†์„ ์ง€์›7. ๋‹คํ˜•์„ฑ(Polymorphism)

5. ๊ฐ์ฒด ๋ฉค๋ฒ„

5.1. ๊ฐ์ฒด ๋ฉค๋ฒ„ ๊ด€๋ฆฌ

5.1.1. ๋ฉค๋ฒ„ ๊ตฌ๋ถ„


1. ์ƒ์„ฑ์ž ๋ฉค๋ฒ„ (constructor member) : ํ•จ์ˆ˜ ๋ชจ๋ธ์—์„œ ๊ณต๊ฐœ ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„์— ์ถ”๊ฐ€๋˜๋Š” ๋ฉค๋ฒ„
2. ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„(instance member) : ์ƒ์„ฑ์ž ์—์„œ this๋ฅผ ์ด์šฉํ•ด ์ •์˜ํ•˜๋Š” ๋ฉค๋ฒ„
3. ํ”„๋กœํ† ํƒ€์ž… ๋ฉค๋ฒ„(prototype member) : ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์— ์ •์˜ ๋˜๋Š” ๋ฉค๋ฒ„
4. ๊ณต๊ฐœ ๋ฉค๋ฒ„(public member) : ์™ธ๋ถ€ ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฉค๋ฒ„
๊ตฌ๋ถ„, ๊ตฌํ˜„, ์„ค๋ช…์— ๊ด€ํ•œ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.
๊ตฌ๋ถ„๊ตฌํ˜„์„ค๋ช…
๋น„๊ณต๊ฐœ ๋ฉค๋ฒ„๋น„๊ณต๊ฐœ ์†์„ฑvar ๋ณ€์ˆ˜๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜.
๋น„๊ณต๊ฐœ ํ•จ์ˆ˜์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
๋น„๊ณต๊ฐœ ๋ฉ”์„œ๋“œfunction f(){โ€ฆ}
var f = function(){โ€ฆ};
๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์— ์ธ๋ผ์ธ ๋ฐฉ์‹์œผ๋กœ ์ •์˜๋œ, ์ด๋ฆ„์ด ์žˆ๋Š” ํ•จ์ˆ˜ ๋˜๋Š” ์ต๋ช… ํ•จ์ˆ˜.
์ƒ์„ฑ์ž ๋‚ด๋ถ€ ์ฝ”๋“œ์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„์ธ์Šคํ„ด์Šค ์†์„ฑThis.property = ๊ฐ’;์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
Obj.property;
์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œThis.method = function(){โ€ฆ.}์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
Obj.method()
ํ”„๋กœํ† ํƒ€์ž… ๋ฉค๋ฒ„ํ”„๋กœํ† ํƒ€์ž… ์†์„ฑ์ƒ์„ฑ์ž.prototype.property = ๊ฐ’;์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ 
์ƒ์„ฑ์ž.prototype.method();
Obj.method();
ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์ƒ์„ฑ์ž.prototype.method = function(){โ€ฆ};์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
์ƒ์„ฑ์ž.prototype.method();
Obj.method();
์ƒ์„ฑ์ž ๋ฉค๋ฒ„์ƒ์„ฑ์ž ์†์„ฑ์ƒ์„ฑ์ž.property = ๊ฐ’;์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
์ƒ์„ฑ์ž.property;
์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ์ƒ์„ฑ์ž.method = function(){โ€ฆ}์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
์ƒ์„ฑ์ž.mehtod();

5.1.2. ์—ฐ์ƒ ๋ฐฐ์—ด

๊ฐ์ฒด ๋ณ„๋กœ ์ž์‹ ์—๊ฒŒ ์†ํ•œ ๋ฉค๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋‚ด๋ถ€์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์žˆ๋‹ค. ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„(์†์„ฑ,๋ฉ”์„œ๋“œ)๋Š” (ํ‚ค,๊ฐ’)์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ฉค๋ฒ„๋Š” ์ •๋ ฌ๋ผ ์žˆ์ง€ ์•Š๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ํ•ด์‹œ๊ฐ€ ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋„ ํ•ด์‹œ ๊ตฌ์กฐ์˜ ์ผ์ข…์ธ ์—ฐ์ƒ ๋ฐฐ์—ด(associative array)๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

5.1.3. ๋ฉค๋ฒ„ ์ถ”๊ฐ€, ์ œ๊ฑฐ, ๋Œ€์ฒด

์—ฐ์ƒ ๋ฐฐ์—ด์˜ ๋˜ ๋‹ค๋ฅธ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋™์ ์œผ๋กœ ํ•ด๋‹น ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ํŠน์ง•์„ ๊ทผ๊ฑฐ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋Ÿฐํƒ€์ž„์—๋„ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Copy
var obj = new Object();
obj.propertyA =  new date();  //โ€propertyAโ€ ์†์„ฑ ์ถ”๊ฐ€
delete obj.propertyB;            // โ€œpropertyBโ€ ์†์„ฑ ์ œ๊ฑฐ

1. ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๋ณ„๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์œ„ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ๊ทธ ์†์„ฑ์ด ์กด์žฌ ํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค. propertyA๋ผ๋Š” ์†์„ฑ์ด obj์— ์—†์œผ๋ฉด ๊ทธ ์†์„ฑ์€ ์—ฐ์ƒ ๋ฐฐ์—ด ๊ฐ์ฒด์— ์ถ”๊ฐ€๋˜๊ณ  ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.
2. ์†์„ฑ์„ ์‚ญ์ œ ํ•  ๋•Œ๋Š” delete๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ œ๊ฑฐ๋œ ์†์„ฑ์€ ํ•ด๋‹น ์‹œ์  ์ดํ›„ ๋ถ€ํ„ฐ๋Š” ๊ทธ ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
3. ์†์„ฑ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฉ”์„œ๋“œ ๋ฉค๋ฒ„๋„ ์—ญ์‹œ ์ถ”๊ฐ€.์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ๋ฐ, ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ๋Š” ๊ธฐ์กด์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ์˜ ํ–‰๋™์„ ๋‹ค๋ฅธ ๋กœ์ง์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

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. ๋น„๊ณต๊ฐœ ๋ฉค๋ฒ„ ๊ตฌํ˜„

๊ฐ์ฒด์˜ ์ƒํƒœ ๊ฐ’์œผ๋กœ๋Š” ๋‚ด๋ถ€์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์™ธ๋ถ€์˜ ์ ‘๊ทผ ๋ฉ”์„œ๋“œ๋กœ๋Š” ๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋˜, ๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋Š” ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์ƒํƒœ ๊ฐ’๊ณผ ๊ณต๊ฐœ๋œ ์™ธ๋ถ€ ๋ฉ”์„œ๋“œ ์‚ฌ์ด์— ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌ ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค.

Copy
 

5.3.2. ํด๋กœ์ ธ ์ธ์Šคํ„ด์Šค

๋น„๊ณต๊ฐœ ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Copy
 

outer()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ o1์— ํ• ๋‹นํ•œ๋‹ค. public01์„ ํ˜ธ์ถœํ•ด์„œ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ๋ฉด public02 ๋ฅผ ํ˜ธ์ถœ๋  ๋•Œ ์ด์ „์— ์ฆ๊ฐ€๋œ ๊ฐ’์ด ์œ ์ง€๋˜์–ด ๋‘๋ฒˆ์งธ ํ˜ธ์ถœ์˜ ์‹œ์ž‘๊ฐ’์ด ๋œ๋‹ค. Outerํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ ๋˜๋„ ๋‚ด๋ถ€ ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„ ๊ฐ์ฒด๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋Š” ํด๋กœ์ €์˜ ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค.
๋‹ค์‹œ ํ•œ๋ฒˆ outer()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ o2์— ํ• ๋‹นํ•œ ํ›„ public01, public02๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋‚ด์ˆ˜ ๋ณ€์ˆ˜ _x๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ดˆ๊ธฐํ™” ๋๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์•ž์˜ ํด๋กœ์ €์™€๋Š” ๋‹ค๋ฅธ ๋‹ซํžŒ ํ™˜๊ฒฝ์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
ํด๋กœ์ €๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํด๋กœ์ € ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ƒˆ๋กœ์šด ํด๋กœ์ € ์ธ์Šคํ„ด์Šค๋Š” ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ์ดˆ๊ธฐํ™”๋œ ์ƒˆ๋กœ์šด ๋‹ซํžŒ ํ™˜๊ฒฝ์„ ๊ฐ€์ง„๋‹ค.

6. ์ƒ์†

6.1. ํ•จ์ˆ˜์™€ ๊ฐ์ฒด

์ด ๋ฌธ์„œ์˜ Object, Function ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์žฅ ๊ฐ์ฒด Object, Function์„ ์˜๋ฏธ ์ด์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜/์ƒ์„ฑ์ž/๊ฐ์ฒด๋กœ ์–ดํœ˜๋ฅผ ๊ตฌ๋ถ„ํ•จ.

6.1.1. ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ์ •



1. Object ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ตœ์ƒ์œ„ ๊ฐ์ฒด๋Š” Object

2. ์ƒ์„ฑ๋œ Object ์ธ์Šคํ„ด์Šค๋ฅผ this์— ํ• ๋‹น
3. ์ƒ์„ฑ์ž ๋‚ด๋ถ€์˜ ์ฝ”๋“œ ์‹คํ–‰
- ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ์ •์˜ ๋ฐ ์ดˆ๊ธฐํ™”

4. ์ธ์Šคํ„ด์Šค์— ์ƒ์„ฑ์ž์˜ ํ”„๋กœํ†  ํƒ€์ž… ๊ฐ์ฒด ์ฐธ์กฐ ์†์„ฑ __proto__ ์ถ”๊ฐ€
5. this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜
Copy
 


6.1.2. this


1. ๊ณต์œ  ํ•จ์ˆ˜์˜ this
- ์ƒ์„ฑ์ž ๋‚ด๋ถ€ : ์ตœ์ดˆ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค
- ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ : ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ์ฒด == โ€œ.โ€์˜ ์ขŒ์ธก์— ์˜ค๋Š” ๊ฐ์ฒด

2. ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์˜ this
- ์ƒ์„ฑ์ž.prototype.๋ฉ”์„œ๋“œ : ์ƒ์„ฑ์ž์˜ prototype ๊ฐ์ฒด
- ์ธ์Šคํ„ด์Šค.๋ฉ”์„œ๋“œ : ํ˜ธ์ถœ๋œ ์ธ์Šคํ„ด์Šค

3. this์˜ ๋ฃจํŠธ ๊ฐ์ฒด ์ฐธ์กฐ
- ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฃจํŠธ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ
-> ์ƒ์„ฑ์ž๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ this๊ฐ€ ๋ฃจํŠธ ๊ฐ์ฒด์— ์˜ํ–ฅ์„ ์คŒ

4. this ๋ณ€๊ฒฝ
- call, apply ๋ฅผ ์‚ฌ์šฉํ•ด ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” call, apply์— ์ œ๊ณต๋œ ๊ฐ’์„ ์‚ฌ์šฉ

6.2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒ์†

6.2.1. ํ”„๋กœํ† ํƒ€์ž… ๋ฉค๋ฒ„ ์ƒ์†


- ์ƒ์„ฑ์ž๋Š” prototype ๋ฉค๋ฒ„๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
- ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์‹œ __proto__ ๋ฉค๋ฒ„๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
- ์ธ์Šคํ„ด์Šค๋Š” ํ•ด๋‹น ์ƒ์„ฑ์ž์˜ ํ”„๋กœํ† ํƒ€์ž… ๋ฉค๋ฒ„๋ฅผ ์ƒ์†


6.2.2. ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ

์ธ์Šคํ„ด์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •

- ๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„ ์ฒด์ธ ์ฒ˜๋Ÿผ ํ”„๋กœํ† ํƒ€์ž…์˜ ์ฒด์ธ์„ ๋”ฐ๋ผ ๋ฉค๋ฒ„๋ฅผ ๊ฒ€์ƒ‰
- ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ๋Š” Object์ด๋ฏ€๋กœ, ํ”„๋กœํ† ํƒ€์ž…์˜ ์ฒด์ธ์€ Object์— ์—ฐ๊ฒฐ
->Object์˜ ๋ฉค๋ฒ„๋ฅผ ์ƒ์† ๋ฐ›์Œ


6.2.3. Object ๋ฉค๋ฒ„

Object์ƒ์„ฑ์ž์— ์ •์˜๋œ ๋ฉค๋ฒ„ ๊ฐ€์šด๋ฐ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฐ”๋กœ ๋ชจ๋“  ์ƒ์„ฑ์ž๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” prototype์†์„ฑ์ด๋‹ค. Object.prototype ๏ƒจ Object ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ƒ์„ฑ์ž์—๋Š” ๋ฉ”์„œ๋“œ ๋ฉค๋ฒ„๋„ ์ •์˜๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ž์„ธํ•œ ๋Œ€์šฉ์€ ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
https://developer.mozilla.org/en/Javascript/Reference/Global_Objects/Object

Object ๋ฉค๋ฒ„์— ๊ด€ํ•œ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.
obj.constructorObject ๊ฐ์ฒด 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. ๋ฆฌํ”Œ๋ ‰์…˜

๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด์˜ ๊ฐ’ ํƒ€์ž…๊ณผ ๋ฉค๋ฒ„์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐํžˆ๋Š” ์ž‘์—…

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
ยซ   2024/04   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ