let's get IT with DAVINA ๐Ÿ’ป

[Inside JavaScript] Chapter 1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๊ฐœ์š” ๋ณธ๋ฌธ

DEV_IN/JavaScript

[Inside JavaScript] Chapter 1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๊ฐœ์š”

๋‹ค๋นˆ์น˜์ฝ”๋“œ๐Ÿ’Ž 2023. 3. 27. 18:20

1.1 ์†Œ๊ฐœ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๋‹ค. 

์ฒ˜์Œ์—” ์›น ํŽ˜์ด์ง€ ์ œ์ž‘์— ์žˆ์–ด์„œ ๋ณด์กฐ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ์จ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๋ชฉ๋ฐ›์ง€ ๋ชปํ–ˆ๋˜ ์–ธ์–ด..๐Ÿฅฒ

BUT, prototype.js์™€ ๊ฐ™์€ ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๊ฐœ๋ฐœ๋˜๊ณ  && jQuery์˜ ๋“ฑ์žฅ์œผ๋กœ ๋ณด๋‹ค ์‰ฝ๊ฒŒ DOM(Document Object Model)์„ ํ•ธ๋“ค๋งํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋งŽ์€ ๋ฐœ์ „์„ ์ด๋ฃจ์—ˆ๋‹ค.


1.2 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™œ์šฉ ๋ฒ”์œ„

1.2.1 ์›น ๊ฐœ๋ฐœ

ํฌ๋กฌ์ด๋‚˜ ํŒŒ์ด์–ดํญ์Šค ๋“ฑ ์›น ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ๋‚˜๋‚ ์ด ๋ฐœ์ „ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋‚ด๋†“์„๋•Œ๋งˆ๋‹ค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ•์กฐํ•œ๋‹ค. ์ด๋Š” ์›น ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ์— ์žˆ์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์—ญํ• ์ด ์–ผ๋งˆ๋‚˜ ํฐ์ง€๋ฅผ ๋ฐฉ์ฆํ•œ๋‹ค.

1.2.2 ์„œ๋ฒ„ ๊ฐœ๋ฐœ

Node.js์˜ ์ถœํ˜„์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•œ ์„œ๋ฒ„ ๊ฐœ๋ฐœ๋„ ํ™œ๋ฐœํžˆ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋‹ค. express, socket.io ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ณด๋‹ค ์‰ฝ๊ฒŒ JS๋กœ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ด์ค€๋‹ค.

1.2.3 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

์›น์ด ํ•˜๋‚˜์˜ ํ”Œ๋žซํผ์œผ๋กœ ์ง„ํ™”ํ•˜๋ฉด์„œ, ์›นOS์˜ ์ค‘์š”์„ฑ์ด ์ปค์กŒ๋‹ค. ์ด๋Ÿฌํ•œ ์›น ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ์—์„œ ๊ตฌ๋™๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•„์ˆ˜์ ์ธ ์š”์†Œ๊ฐ€ ๋˜์—ˆ๋‹ค. ํŠนํžˆ ํฐ๊ฐญ(PhoneGap)๊ณผ ๊ฐ™์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜๋ฉด DOM์š”์†Œ๋ฅผ ํ•ธ๋“ค๋งํ•˜์—ฌ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์—์„œ๋ถ€ํ„ฐ ๋” ๋‚˜์•„๊ฐ€ ๋””๋ฐ”์ด์Šค์˜ ๋™์ž‘์— ๋Œ€ํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๊ณ  ์žˆ๋‹ค.


1.3 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ต์‹ฌ ๊ฐœ๋…

1.3.1 ๊ฐ์ฒด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ "๊ฑฐ์˜" ๋ชจ๋“  ๊ฒƒ์€ "๊ฐ์ฒด"์ด๋‹ค. 

์˜ˆ์™ธ) boolean, number, string (์›์‹œ์ž๋ฃŒํ˜•) / null, undefined

1.3.2 ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜๋„ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค. (์ผ๋ฐ˜ ๊ฐ์ฒด๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฐ์ฒด)

ํ•จ์ˆ˜๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ? ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰ ๊ฐ์ฒด(First Class Object)๋กœ ๋‹ค๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

1.3.3 ํ”„๋กœํ† ํƒ€์ž…

๋ชจ๋“  ๊ฐ์ฒด๋Š” ์ˆจ๊ฒจ์ง„ ๋งํฌ์ธ prototype์„ ๊ฐ€์ง„๋‹ค. ์ด ๋งํฌ๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒ์„ฑ์ž์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

1.3.4 ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ํด๋กœ์ €

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ž์‹ ๋งŒ์˜ ๋…ํŠนํ•œ ๊ณผ์ •์œผ๋กœ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์—์„œ ์‹คํ–‰์ด ์ด๋ค„์ง„๋‹ค.

์ด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ž์‹ ๋งŒ์˜ ์œ ํšจ ๋ฒ”์œ„(scope)๋ฅผ ๊ฐ–๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ํด๋กœ์ €๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


1.4 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํด๋ž˜์Šค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

HOW? ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ & ํด๋กœ์ €๋กœ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ œ์‹œํ•˜๋Š” ์ƒ์†, ์บก์Šํ™”, ์ •๋ณด ์€๋‹‰ ๋“ฑ์˜ ๊ฐœ๋…์„ ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


1.5 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
๋†’์€ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆํ™”๋ฅผ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ๋งค์šฐ ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•

HOW? JS์˜ ์ฃผ์š” ํŠน์„ฑ์ธ ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ์„œ์˜ ํ•จ์ˆ˜ ํŠน์„ฑ๊ณผ ํด๋กœ์ €๋ฅผ ํ™œ์šฉ

BUT! this makes ๊ฐ€๋…์„ฑ bad


1.5 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹จ์ 

  • ์œ ์—ฐํ•œ ์–ธ์–ด → ๋””๋ฒ„๊น… ์–ด๋ ค์›€
  • ๋Š์Šจํ•œ ํƒ€์ž… ์ฒดํฌ → ์ปดํŒŒ์ผ ํƒ€์ž„์—์„œ ์žก์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜๋Š” ๊ณ ์Šค๋ž€ํžˆ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋กœ ๋ฐœ๊ฒฌ๋œ๋‹ค.
  • ์ „์—ญ ๊ฐ์ฒด์˜ ์กด์žฌ → ์ด๋ฆ„ ์ถฉ๋Œ์˜ ์œ„ํ—˜์„ฑ 

'DEV_IN > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Module  (2) 2023.02.28
This  (6) 2023.02.28
Prototype  (5) 2023.02.28
JavaScript Event Loop๋ž€?  (4) 2023.02.22
priceFormatter  (0) 2023.02.08
Comments